Portál AbcLinuxu, 9. května 2025 00:21
nedokazal jsem nacist debug symboly pro knihovnu(plugin) nacteny pres dlopen. Dalsi probem je, ze nektere veci(treba breakpointy) nefunguji pokud gdb attechnete k bezicimu procesu, zatimco binarka spustena primo gdb krokovat jde.Možno robíš zložitejšie veci ako ja, ale tieto konkrétne veci mi fungujú. Používam ich na debugovanie dynamickej knižnice používanej cez JNI z javy. Predpokladám, že java urobí
dlopen()
keď sa zavolá niečo ako Runtime.getRuntime().load(menokniznice)
. Vidím kód knižnice a môžem používať breakpointy.
Fakt? Muzu se zeptat jak to delas?Fakt. Nerobím nič zvláštne. Mám Slackware (takmer -current), gdb 6.6, gcc 4.1.2, jdk-6u1-i586, ručne kompilované jadro 2.6.23. Knižnica je kompilovaná s "gcc -g -ggdb -Wall -Wno-unused ...", linkovaná s "gcc -lm -shared ...". Mám knižnicu napísanu aj v C a inú napísanú v C++. Keď potrebujem debugovať tak zariadim z javy, aby bola knižnica nahraná do pamäte (spomínané Runtime.getRuntime().load(menokniznice)), potom dám breakpoint v Eclipse a kým na ňom stojím, tak si v inom okne poustím "ps axu |grep java ", a urobím
gdb /usr/lib/jdk1.6.0_01/bin/java {pidprocesu}
a v gdb potom urobím breakpoint na meno funkcie. Dám continue
, v gdb a v eclipse a gdb po chvíli zastane na funkcii. Žiadne čary. Fungovalo mi to aj zo staršími verziami gdb/gcc/jdk/jadra.
Ak máš nejaké ďalšie otázky, založ novú diskusiu, alebo sa ozvi mailom. Sem to už asi nepatrí.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.