How to generate stackdump and dumped register values when an application in gcc crashes without gdb?
当我的C++应用程序崩溃时,我想生成堆栈转储和显示转储寄存器值。
我的应用程序在Linux上运行。
我希望我的程序能够在崩溃时生成stackdump并显示转储的寄存器值,下次用户运行它时,它将询问他们是否可以将这些值发送给我,以便我可以跟踪问题。我可以处理stacktrace信息,但我不知道如何生成这两种信息。有什么想法吗?
感谢所有的回复者
谢谢你VLC
- Google的stacktrace.cc在几年前推出时引起了轰动;我不确定它是否仍然流行,但标题确实提到了libunwind,它在我的Ubuntu系统上提供,包为libunwind7和-dev。
这个问题的答案在你的案例中可能有些用处。但答案中的代码只打印一个stacktrace并在sigsegv上注册。你可能需要做更多的工作来满足你的需要。
- 嗨,vpit,非常感谢您的回复。您是完全正确的……但我需要打印寄存器和stackdump的转储值。我也在打印stacktrace。所以,在应用程序中如何在不使用调试器的情况下完成这项工作。有什么想法吗????
- 如果libsigsegv.so是按照上述方式构建的,并随应用程序一起提供给您的用户,那么他们将在sigsegv上看到stacktrace并注册状态。你的应用,而建设必须通过-rdynamic到海湾合作委员会。如果您希望在除SIGSEGV之外的其他信号上崩溃,那么也为这些信号注册一个信号处理程序。不需要GDB。我使用这段代码来捕获sigsegv,因为这是我的程序将生成的最常见的异常。