我有一个应用程序,在C++上运行的Linux,在出口获取中止信号。 在追踪代码来追究问题之前,我需要知道可能会发生什么情况,以便从内核中获取中止信号。这可以给我正确的调试方向。中止信号的一般原因是什么?
请提及应用程序可能会收到中止信号的每种潜在情况。
@执行情形的细节是,
- 过程是在退出模式,即出口()例程被调用过程的正常关机。
- 因此调用所有全局对象析构函数。
TIA
我有一个应用程序,在C++上运行的Linux,在出口获取中止信号。 在追踪代码来追究问题之前,我需要知道可能会发生什么情况,以便从内核中获取中止信号。这可以给我正确的调试方向。中止信号的一般原因是什么?
请提及应用程序可能会收到中止信号的每种潜在情况。
@执行情形的细节是,
TIA
我会尝试在valgrind下运行。甚至在中止和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
你一定要明白,在gdb运行你的应用程序将让你看到确切的所在行中止被调用,并给你一个调用堆栈 – radman 2011-04-20 04:59:41
我有几次与gdb运行,但问题是,一旦进程中止信号它是从gdb分离。所以堆栈跟踪不可用。 – Mandar 2011-04-20 06:56:14