Wie setzt man einen Haltepunkt in gdb?
(gdb) b Dateiname:Leinennummer // z.B. b main.cpp:100
Gibt es eine Möglichkeit, einen Abbruch zu erzwingen? Ich erinnere mich, dass es eine ENV-Variable gibt, um dies zu steuern?
Ich hatte den Eindruck, dass er standardmäßig abbricht. Stellen Sie sicher, dass Sie die Debug-Version installiert haben.
Oder verwenden Sie libdmalloc5: "Drop-in-Ersatz für die systemeigene malloc',
realloc', calloc',
free' und andere Speicherverwaltungsroutinen und bietet gleichzeitig leistungsstarke Debugging-Möglichkeiten die während der Laufzeit konfiguriert werden können. Zu diesen Möglichkeiten gehören u.a. die Verfolgung von Speicherlecks, die Erkennung von Fence-Post-Write, die Meldung von Datei-/Zeilennummern und die allgemeine Protokollierung von Statistiken."
Fügen Sie Ihrem Link-Befehl Folgendes hinzu
-L/usr/lib/debug/lib -ldmallocth
gdb sollte automatisch die Kontrolle zurückgeben, wenn die Glibc einen Abbruch auslöst.
Oder Sie können einen Signalhandler für SIGABRT einrichten, der den Stacktrace in eine fd (Dateideskriptor) ausgibt. Unten ist mp_logfile eine FILE*
void *array[512 / sizeof(void *)]; // 100 is just an arbitrary number of backtraces, increase if you want.
size_t size;
size = backtrace (array, 512 / sizeof(void *));
backtrace_symbols_fd (array, size, fileno(mp_logfile));
0 Stimmen
Ich denke, diese Frage muss je nach System unterschiedlich beantwortet werden und ist nicht auf Linux beschränkt (z.B. OpenBSD, OSX).