Die Betreffzeile sagt im Grunde alles.In GDB ist es möglich, eine relative Adresse (in Zeilen) vom Anfang einer Funktion zu geben?
Wenn ich den Speicherort basierend auf der Datei und einer Zeilennummer gebe, kann sich dieser Wert ändern, wenn ich die Datei bearbeite. Tatsächlich neigt es dazu, sich ziemlich oft und auf unbequeme Weise zu ändern, wenn ich während des Refactorings mehr als eine einzige Funktion bearbeite. Es ist jedoch weniger wahrscheinlich, dass es sich ändert, wenn es (line-) relativ zum Anfang einer Funktion wäre.
Wenn es nicht möglich ist, den Zeilenoffset vom Anfang einer Funktion zu geben, ist es dann vielleicht möglich, Convenience-Variablen zu verwenden, um sie zu emulieren? I.e. wenn ich Convenience-Variablen deklarieren würde, die dem Beginn einer bestimmten Funktion zugeordnet sind (eine Liste, die ich auf dem neuesten Stand halten würde)?
Laut help break
scheint keiner verfügbar zu sein, aber ich dachte, ich sollte besser fragen, um sicher zu sein.
(gdb) help break
Set breakpoint at specified line or function.
break [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]
PROBE_MODIFIER shall be present if the command is to be placed in a
probe point. Accepted values are `-probe' (for a generic, automatically
guessed probe type) or `-probe-stap' (for a SystemTap probe).
LOCATION may be a line number, function name, or "*" and an address.
If a line number is specified, break at start of code for that line.
If a function is specified, break at start of code for that function.
If an address is specified, break at that exact address.
With no LOCATION, uses current execution address of the selected
stack frame. This is useful for breaking on return to a stack frame.
THREADNUM is the number from "info threads".
CONDITION is a boolean expression.
Multiple breakpoints at one place are permitted, and useful if their
conditions are different.
Do "help breakpoints" for info on other commands dealing with breakpoints.
Zusätzlich zu den Prüfpunkten habe ich auch die 'Break-Funktion: Label' Syntax zu den gleichen Effekt in der Vergangenheit verwendet. das könnte auch eine Option sein. – matt
10 @TomTromey: SystemTap ist auch Linux-spezifisch, oder? Während ELF, GCC und GDB nicht sind. – 0xC0000022L
Ja, SystemTap ist Linux-spezifisch. Es ist jedoch möglich, sdt.h-Tests auf anderen Systemen zu verwenden. Ich habe es nicht versucht, aber ich verstehe nicht warum. Die gesamte Entwicklung der Sonden ist nur eine einzige Header-Datei ... –