Forum: PC-Programmierung Trace nach Programmabsturz ins Log schreiben.


von Peter (Gast)


Lesenswert?

Hi!

Ist es eigentlich irgendwie möglich, ein Programm bei einem Absturz 
einen Call-Backtrace in ein Log-File schreiben zu lassen?

Ein Handler für nicht behandelte Exceptions lässt sich, so weit ich 
weiß, mit  SetUnhandledExceptionFilter einrichten.
Nur, gibt es dann auch eine Möglichkeit die momentan aufgerufenen 
Funktionen auszugeben?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Nur, gibt es dann auch eine Möglichkeit die momentan aufgerufenen
> Funktionen auszugeben?

Das tut der windows-eigene Crashdebugger DrWatson, der erzeugt einen 
Stackdump. Wenn entsprechende Debugsymbole vorhanden sind, auch mit 
symbolischen Namen.

Also sollte es auch möglich sein, im entsprechenden Exceptionhandler den 
Stack zu analysieren.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Die Routinen aus der dbghelp.dll dürften für dich interessant sein.
z.B http://msdn.microsoft.com/en-us/library/ms680650(VS.85).aspx

von Peter (Gast)


Lesenswert?

Das Ziel ist, dass der User nur eine einzige Datei einsenden muss. In 
der dann sowohl die normalen Debugmeldungen des Programms, als auch der 
Stackdump drin stehen. Wenn ich das hinbekomme.

Die dbghelp.dll schaut viel versprechend, auch auch relativ kompliziert 
aus. Ich versuch mal, ob ichs damit hin bekomme.


Falls jemand noch Hinweise hat, wie man die Aufgabe unter Linux lösen 
könnte, wäre ich auch sehr dankbar, da das Programm auf beiden 
Plattformen läuft.

von Tobi H. (tobi-) Benutzerseite


Angehängte Dateien:

Lesenswert?

Für Linux:
http://www.delorie.com/gnu/docs/glibc/libc_665.html
und Anhang

Musst das beim Kompilieren allerdings einschalten, dass auch Namen 
aufgelöst werden. z.b mit
g++ -g -rdynamic -p -pg -o test test.cpp

Keine Ahnung ob die Parameter alle nötig sind :)

von Peter (Gast)


Lesenswert?

Hab einen interessanten Artikel gefunden, in dem die dbghelp.dll 
verwendet wird. Der Code is sehr einfach anzuwenden. Wen's interessiert:

http://www.codeproject.com/KB/threads/StackWalker.aspx

Wie ist das nun mit der Weitergabe der dll?
Wie sieht die rechtliche Situation aus, darf ich die Datei mit meinem 
Programm weiter geben?
Muss ich eine zum Betriebssystem passende Version mitliefern? Also 
müsste ich dann mehrere Versionen mitliefern. Dann müsste ich mir was 
ausdenken, wie ich das regel, damit die richtige verwendet wird.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?


von Uhu U. (uhu)


Lesenswert?

Peter wrote:
> Das Ziel ist, dass der User nur eine einzige Datei einsenden muss. In
> der dann sowohl die normalen Debugmeldungen des Programms, als auch der
> Stackdump drin stehen. Wenn ich das hinbekomme.

Für Windows: DrWatson macht das alles automatisch.

> Die dbghelp.dll schaut viel versprechend, auch auch relativ kompliziert
> aus. Ich versuch mal, ob ichs damit hin bekomme.

Wenn das Programm mit MS-Compilern erzeugt wurde und du die 
Debug-Symbole, also die zugehörige .pdb-Datei und die Quellen aufhebst, 
kannst du den Dump amschließend in WinDbg laden und analysieren. Evtl. 
bietet auch Visual Studio solche Möglichkeiten - such mal danach...

Auf jeden Fall muß man nichts selbst programmieren, um die Informationen 
incl. Variablenwerte und Aufrufkette zu analysieren.

von Peter (Gast)


Lesenswert?

das selber programieren ist nicht das Problem. Das läuft bei mir bereits 
wunderbar und schreibt den den Call-Stack ins log file.

Was mich im Moment noch beschäftigt, ist, dass nicht wirklich verstehe, 
was in der Microsoft EULA zum Redistributable Code steht, welche 
Bedingungen da genau einzuhalten sind.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.