Debuggen unter Linux mit core-dumps
Was sind die 'best practices', wenn es um debugging-core-dumps mit GDB?
Derzeit stehe ich vor einem problem:
- Die release-version meiner Anwendung kompiliert wird, ohne die '-g' - compiler-flag.
- Die debug-version meiner Applikation (kompiliert mit '-g') archiviert (zusammen mit dem Quellcode und eine Kopie der release-binary).
Kürzlich, wenn ein user gab mir ein core dump habe ich versucht zu Debuggen es mit
gdb --core=./core.pid ./my_app_debug-bin
Der Kern wurde erstellt von my_app_release-bin
. Es scheint eine Art Konflikt zwischen der core-Datei und die binäre.
Auf der anderen Seite, wenn ich versuche
gdb --core=./core.pid ./my_app_release-bin
den Kern passt, aber ich bin nicht in der Lage zu bekommen, source-code-Zeile, die zahlen (ich bekomme zwar die Funktion Namen).
Ist es das, was praktiziert wird? Weil ich fühle, ich bin hier etwas fehlt.
- Nettes extra tagging im Frage-Titel, ich meine es ist nicht so, SO hat gebaut-in versehen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie es andere Unterschiede zwischen dem release und debug-build dann einfach die Abwesenheit/Anwesenheit des
-g
Flagge. Unter der Annahme, dass das der Fall ist, gibt es nichts, was Sie tun können, gerade jetzt, aber Sie können anpassen, Ihr zu bauen, das zu handhaben, besser:Hier ist, was wir tun, an meinem Arbeitsplatz.
-g
flag beim erstellen der release-version.strip --strip-unneeded
auf den binären vor dem Versand an die Kunden.Nun, wenn wir mit einem crash-wir können die archivierte version mit Symbolen zu tun Debuggen.
Eine Sache zu beachten ist, dass, wenn Ihre version beinhaltet Optimierungen, debugging schwierig sein kann, auch mit Symbolen. Zum Beispiel, kann der Optimierer ordnen Sie Ihren code so, obwohl der debugger sagen, Sie stürzte auf der Linie N können Sie nicht davon ausgehen, dass der code tatsächlich ausgeführt wird Zeile N-1.
info line *0xsomeaddr
assert
, dann die änderung wird Auswirkungen auf die binary).Müssen Sie einige zusätzliche Sachen zu erstellen binaries mit offenem debug-Informationen, die Sie können dann Debuggen von Kernen. Beste Beschreibung, die ich finden konnte, ist hier
Nein, Sie verpassen nichts. debug-und release-sind einfach anders-Binärdateien, so dass die core-Dateien der release nicht mit der debug binäre. Sie haben sich die Computer-code, um etwas von der release-core-dump.
Werden Sie wahrscheinlich haben, Fragen Sie Ihren Benutzer, wie der crash passiert ist, und sammeln Sie zusätzliche log-Informationen oder was auch immer Sie app produziert.