www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi H. (tobi-) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.