Próbuję zautomatyzować sesję gdb za pomocą --command
flagi. Próbuję ustawić punkt przerwania funkcji w bibliotece współdzielonej (odpowiednik biblioteki DLL w systemie Unix). Mój cmds.gdb wygląda następująco:
set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r
Jednak otrzymuję następujące informacje:
shlomi: ~ / progs / bugs-external / kde / font-breaking $ gdb --command = cmds.gdb ... GNU gdb 6.8-2mdv2009.0 (Mandriva Linux wydanie 2009.0) Copyright (C) 2008 Free Software Foundation, Inc. Licencja GPLv3 +: GNU GPL w wersji 3 lub nowszej To jest wolne oprogramowanie: możesz je zmieniać i rozpowszechniać. NIE MA GWARANCJI, w zakresie dozwolonym przez prawo. Wpisz „pokaż kopiowanie” i „pokaż gwarancję”, aby uzyskać szczegółowe informacje. Ten GDB został skonfigurowany jako „i586-mandriva-linux-gnu” ... (nie znaleziono symboli debugowania) Funkcja „IA__FcFontMatch” nie została zdefiniowana. Oczekiwanie na punkt przerwania podczas przyszłego ładowania udostępnianej biblioteki? (y lub [n]) [odpowiedział N; wejście nie z terminala]
Więc w końcu nie ustawia punktu przerwania. Jak ustawić domyślną odpowiedź „y”, aby ustawić punkty przerwania w oczekiwaniu na przyszłe załadowanie biblioteki współdzielonej?
Pamiętam, że mogłem coś zrobić, ale nie pamiętam co.
Odpowiedzi:
Odpowiadając sobie, chciałbym udzielić odpowiedzi, którą ktoś udzielił mi na IRC:
Tak więc ustawianie punktu przerwania w oczekiwaniu załatwia sprawę; jest używany
cmds.gdb
npset breakpoint pending on break <source file name>:<line number>
źródło
Program received signal SIGILL, Illegal instruction
. Pobieram punkty przerwania z pliku i mam,set breakpoint pending on
ponieważ niektóre z moich punktów przerwania znajdują się w bibliotece ładowanej przez program. Jeśli dodam punkty przerwania ręcznie, nie ma błędu. Czy ktoś jeszcze ma podobny problem?OT: W terminalu wyglądałoby tak, aby debugować Caja w jednej linii:
gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
źródło
-ex
nie działa dla mnie. Musiałem umieścić polecenia w pliku tmp i zadzwonić z:gdb -x /tmp/gdb.commands myexecutible
Bez symboli.
objdump -t /lib/libacl.so SYMBOL TABLE: no symbols objdump -T /lib/libacl.so ... 00002bd0 g DF .text 000000d0 ACL_1.0 acl_delete_entry ... (gdb) break 0x0002bd0 (gdb) x/20i acl_delete_entry 0x2bd0 <acl_delete_entry>: stwu r1,-32(r1) 0x2bd4 <acl_delete_entry+4>: mflr r0 0x2bd8 <acl_delete_entry+8>: stw r29,20(r1) 0x2bdc <acl_delete_entry+12>: stw r30,24(r1) 0x2be0 <acl_delete_entry+16>: mr r29,r4 0x2be4 <acl_delete_entry+20>: li r4,28972
źródło