測試**如下:
#include
#include
static unsigned int _crash_test(void)
int main(int argc, char* argv)
exit(0);}
執行這個程式,系統會掛掉,可以看到會發生floating point exception。
sh-# ./test_main
floating point exception (core dumped)
>
this is free software: you are free to change and redistribute it.
there is no warranty, to the extent permitted by law. type "show copying"
and "show warranty" for details.
this gdb was configured as "arm-linux".
for bug reporting instructions, please see:
<
>...
reading symbols from ./test_main...done.
warning: exec file is newer than core file.
[new thread 6739]
reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
loaded symbols for /lib/libc.so.6
reading symbols from /lib/ld-linux.so.3...(no debugging symbols found)...done.
loaded symbols for /lib/ld-linux.so.3
core was generated by `./test_main'.
program terminated with signal 8, arithmetic exception.
#0 0x400a4630 in raise () from /lib/libc.so.6
bt#0 0x400a4630 in raise () from /lib/libc.so.6
#1 0x00008668 in __div0 ()
at ../../gcc-4.2.1/gcc/config/arm/lib1funcs.asm:1000
#2 0x0000863c in __udivsi3 ()
at ../../gcc-4.2.1/gcc/config/arm/lib1funcs.asm:754
#3 0x000083f4 in _crash_test ()
#4 0x00008430 in main ()
sh-#
在callstack中,看到了_crash_test函式,這是程式設計師自己編寫的程式。
通過進一步檢查程式源**發現,果然是因為除零操作引起的程式錯誤。
如果看不到callstack,但是卻有程式出錯時的位址,
那也可以使用addr2line這個工具來嘗試恢復程式出錯的位置。
# addr2line 0x83f4 -e ./test_main -f
_crash_test
#
解決問題 Ubuntu系統宕機crash
有時碰到ubuntu系統宕機的情況,強制關機容易丟失資料甚至是造成系統崩潰。網上有人給出了幾種解決方法 感覺有點複雜,簡化了一下,有兩種快速的解決方案 1.重啟xserver ctrl alt f1進入tty1,輸入使用者名稱密碼登入,然後執行 sudo pkill xorg或者 sudo rest...
定位crash問題
使用反彙編精確到一條彙編指令 addr2line可以精確到哪一行 但是一行 可能對應多條指令,所以如果條件允許的話,拿到帶有符號表的演算法庫,反彙編到具體指令。工作中出現乙個crash,首先定位到具體語句 mdevice getpixfmt framemsg mframe,framefmt 如果單看...
Linux核心Crash分析
每乙個程序的生命週期內,其生命週期的範圍為幾毫秒到幾個月。一般都是和核心有互動,例如使用者空間程式使用系統呼叫進入核心空間。這時使用的不再是使用者空間的棧空間,使用對應的核心棧空間。對每乙個程序來說,linux核心都會把兩個不同的資料結構緊湊的存放在乙個單獨為程序分配的儲存空間中 乙個是核心態的程序...