So setzen Sie Haltepunkte für zukünftige gemeinsam genutzte Bibliotheken mit einem Befehlsflag

92

Ich versuche, eine GDB-Sitzung mithilfe des --commandFlags zu automatisieren . Ich versuche, einen Haltepunkt für eine Funktion in einer gemeinsam genutzten Bibliothek festzulegen (das Unix-Äquivalent einer DLL). Meine cmds.gdb sieht folgendermaßen aus:

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

Ich erhalte jedoch Folgendes:

shlomi: ~ / progs / bugs-external / kde / font-brechend $ gdb --command = cmds.gdb ...
GNU gdb 6.8-2mdv2009.0 (Mandriva Linux Release 2009.0)
Copyright (C) 2008 Freie Software Foundation, Inc.
Lizenz GPLv3 +: GNU GPL Version 3 oder höher 
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keine Garantie, soweit dies gesetzlich zulässig ist. Geben Sie "Kopieren anzeigen" ein
und "Garantie anzeigen" für Details.
Diese GDB wurde als "i586-mandriva-linux-gnu" konfiguriert ...
(Keine Debugging-Symbole gefunden)
Funktion "IA__FcFontMatch" nicht definiert.
Haltepunkt beim zukünftigen Laden der gemeinsam genutzten Bibliothek anstehen lassen? (y oder [n]) [antwortete N; Eingabe nicht vom Terminal]

Der Haltepunkt wird also doch nicht gesetzt. Wie kann ich festlegen, dass standardmäßig "y" geantwortet wird, um Haltepunkte für das bevorstehende Laden zukünftiger gemeinsam genutzter Bibliotheken festzulegen?

Ich erinnere mich, dass ich etwas tun konnte, mich aber nicht erinnern kann, was.

Shlomi Fisch
quelle

Antworten:

149

Ich antworte mir selbst und möchte die Antwort geben, die mir jemand im IRC gegeben hat:

(gdb) apropos anhängig
Aktionen - Geben Sie die Aktionen an, die an einem Tracepoint ausgeführt werden sollen
Haltepunkt setzen - Haltepunktspezifische Einstellungen
Haltepunkt ausstehend setzen - Legt das Verhalten des Debuggers in Bezug auf ausstehende Haltepunkte fest
Haltepunkt anzeigen - Haltepunktspezifische Einstellungen
Haltepunkt ausstehend anzeigen - Zeigt das Verhalten des Debuggers in Bezug auf ausstehende Haltepunkte an

Wenn Sie also den anstehenden Haltepunkt festlegen, ist dies der Trick. es wird verwendet cmds.gdbwie z

set breakpoint pending on
break <source file name>:<line number>
Shlomi Fisch
quelle
Das hat meinen Speck gerettet, der versucht, unter Windows 7 mit MinGW zu debuggen. Die Standardeinstellung war anders als unter Linux - vielen Dank
bph
Aus irgendeinem Grund erhalte ich diesen Fehler Program received signal SIGILL, Illegal instruction. Ich beziehe Haltepunkte aus einer Datei und habe set breakpoint pending onseitdem einige meiner Haltepunkte in einer Bibliothek, die das Programm lädt. Wenn ich Haltepunkte manuell hinzufüge, liegt kein Fehler vor. Hat noch jemand ein ähnliches Problem?
gebrochener Fuß
@brokenfoot: Ich denke, Sie sollten Ihre Frage in einer neuen Frage der obersten Ebene stellen, anstatt in einem Kommentar zu einer Antwort hier. Auf diese Weise werden mehr Menschen es bemerken. Darüber hinaus sollten Sie weitere Informationen zu Ihrem System bereitstellen.
Shlomi Fish
10

OT: Im Terminal würde es so aussehen, Caja in einer Zeile zu debuggen:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
äxl
quelle
2
Wo haben Sie den 'ex'-Schalter gefunden? Ich kann keinen Verweis auf diesen Parameter in der Dokumentation finden (aber es funktioniert :))
Gearoid Murphy
-exhat bei mir nicht funktioniert. Ich musste die Befehle in eine tmp-Datei einfügen und anrufen mit:gdb -x /tmp/gdb.commands myexecutible
Jason Moore
5

Ohne Symbole.

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
RandomNickName42
quelle