我有一個應用程序,在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