Wie generieren Sie automatisch einen stacktrace, wenn mein Programm stürzt ab

Ich arbeite auf Linux mit dem GCC compiler. Wenn mein C++ Programm abstürzt, würde ich es gerne automatisch erzeugen eines stacktrace.

Mein Programm ausgeführt wird, die von vielen verschiedenen Benutzern, und es läuft auch auf Linux, Windows und Macintosh (alle Versionen kompiliert mit gcc).

Ich möchte mein Programm erzeugen zu können, einen stack-trace, wenn es abstürzt und der Benutzer das nächste mal läuft es, es wird Sie Fragen, ob es in Ordnung ist, senden die stack-trace zu mir, so kann ich das problem zurückzuverfolgen. Ich kann mit dem versenden der info an mich, aber ich weiß nicht, wie zu generieren der trace-Zeichenfolge. Irgendwelche Ideen?

  • Welches OS, welche shell?
  • backtrace und backtrace_symbols_fd nicht async-signal-safe. Sie sollten nicht verwenden, diese Funktion im signal-handler
  • backtrace_symbols Aufrufe von malloc, darf also nicht verwendet werden, in einem signal-handler. Die anderen beiden Funktionen (backtrace und backtrace_symbols_fd) dieses problem nicht haben, und sind Häufig in der signal-Handler.
  • das ist falsch backtrace_symbols_fd in der Regel nicht rufen malloc kann aber, wenn etwas schief geht in seiner catch_error block
  • Es "kann" in dem Sinne, dass es keine POSIX-Spezifikation für backtrace_symbols_fd (oder jede backtrace), aber GNU/Linux ist backtrace_symbols_fd angegeben ist, nie rufen malloc, als pro linux.die.net/man/3/backtrace_symbols_fd . Daher ist es sicher davon ausgehen, dass es nie aufrufen von malloc auf Linux.
  • Wie kommt es zum Absturz?
  • Nicht sicher, ob nicht behandelte Ausnahmen zu qualifizieren als "Programm-Absturz", aber die Methode zum drucken eines stacktrace bei exceptions geworfen werden beschrieben in dieser Antwort könnte auch interessant für Sie sein.

InformationsquelleAutor KPexEA | 2008-09-16
Schreibe einen Kommentar