Ich habe ein Programm, das ich an Endbenutzer verteilen möchte und von diesen Absturzberichte erhalten möchte. Wenn ich MSVC verwenden würde, würde ich Minidumps generieren und diese an mich senden lassen und sie dann mit der entsprechenden PDB untersuchen, um zumindest einen nützlichen Stack-Trace zu erhalten.GCC-Äquivalent von PDBs
Was ist mit GCC? Ich kann einen Stack-Trace erzeugen, aber wenn ich möchte, dass dies nützlich ist, müssen Debug-Symbole in der ausführbaren Datei kompiliert werden (mit -g). Offensichtlich ist dies für die Freigabeverteilung inakzeptabel, da die ausführbare Datei ziemlich groß werden kann.
Ich googelte ein wenig und fand Verweise auf objcopy in der Lage, Debug-Symbole in eine separate Datei zu trennen, aber diese Seite implizierte, würde ich noch die Debug-Symbole neben der ausführbaren Release-Datei zur Verfügung haben, was wiederum offensichtlich inakzeptabel ist.
Das ist gut und schön, aber wie kann ich einen Stack-Trace, der ohne Debug-Symbole erzeugt wurde (und damit nur Adressen enthält) später mit den getrennten Debug-Symbolen abgleichen, um einen Stack-Trace zu erhalten, den ich tatsächlich lesen kann? – pjohansson
gdb kann separate Debug-Symbole verwenden Dies ist, wie Linux-Distributionen Debug aktivieren, siehe http://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html – ismail
Diese Seite scheint ebenfalls die Debug-Informationen zu übernehmen ist auf dem Computer vorhanden, wo sich der Fehler manifestiert. Ich werde klarstellen: Wir können keine Debug-Informationen an unsere Kunden versenden. Es muss möglich sein, dass die Software eine Stack-Trace (ohne Debug-Symbole) erzeugt und diese Stack-Trace zu einem späteren Zeitpunkt ohne weitere Mitwirkung des Clients mit separaten Debug-Symbolen auf einem unserer Entwicklungsrechner abgeglichen wird. Ich sollte vielleicht auch klarstellen, dass dies eine Windows-Umgebung ist, keine * nix-eine. – pjohansson