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?
> 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.
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
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.
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 :)
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.
Oder http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/src/msw/debughlp.cpp http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/src/msw/stackwalk.cpp http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/src/unix/stackwalk.cpp http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk/include/wx/stackwalk.h usw :) Da hab ich alle Infos her
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.