我有一个应用程序,在 C++ 中运行 linux,它在退出时获得中止信号。在我去寻找代码来寻找问题之前,我需要知道在什么情况下我会从内核中得到一个中止信号。这可以给我正确的调试方向。
请提及应用程序可能获得中止信号的每一个潜在场景。
@执行场景的细节是,
- 进程处于退出模式,即调用 exit() 例程以正常关闭进程。
- 因此调用了所有全局对象析构函数。
TIA
当应用程序崩溃时,调试器会给你一行,让你检查线程,变量......
其他解决方案:
根本原因可能是多个:读取内存空间之外,除以 0,取消引用无效指针......
我会尝试在valgrind下运行。甚至在 abort 和 valgrind 注意到并告诉你之前就可能存在内存错误。如果是这种情况,您会发现错误比使用 gdb 之类的传统调试器容易得多。
中止的原因通常是断言失败
例如
(gdb) bt
#0 0x00000035fbc30265 in raise () from /lib64/libc.so.6
#1 0x00000035fbc31d10 in abort () from /lib64/libc.so.6
#2 0x00000035fbc296e6 in __assert_fail () from /lib64/libc.so.6