在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的,本文對此做簡單介紹。
例如,乙個程式cmm_test_tool在執行的時候發生了錯誤,並生成了乙個core檔案,如下:
-rw-r–r– 1 root cmm_test_tool.c -rw-r–r– 1 root cmm_test_tool.o -rwxr-xr-x 1 root cmm_test_tool -rw——- 1 root core.19344 -rw——- 1 root core.19351 -rw-r–r– 1 root cmm_test_tool.cfg -rw-r–r– 1 root cmm_test_tool.res -rw-r–r– 1 root cmm_test_tool.log [root@autotest_sim2 mam2cm]#
首先利用file core.19344命令可以得到:
core.19344: elf 32-bit lsb core file intel 80386, version 1 (sysv), svr4-style, from 'cmm_test_tool'
可以看出core.19344是由cmm_test_tool這個工程產生。
接著就可以利用命令gdb進行查詢,格式為gdb 工程名 core檔名,例如 gdb cmm_test_tool core.19344結果如下:
最後乙個步驟是輸入where,找到錯誤發生的位置和堆疊,如下:
(gdb) where
#0 0×4202cec1 in __strtoul_internal () from /lib/i686/libc.so.6
#1 0×4202d4e7 in strtoul () from /lib/i686/libc.so.6
#2 0×0804b4da in getmaxidfromdb (get_type=2, max_id=0×806fd20) at cmm_test_tool.c:788
#3 0×0804b9d7 in constrctvodprogram (vod_program=0×40345bdc) at cmm_test_tool.c:946
#4 0×0804a2f4 in tvrequestthread (arg=0×0) at cmm_test_tool.c:372
#5 0×40021941 in pthread_start_thread () from /lib/i686/libpthread.so.0 (gdb)
至此,可以看出檔案出錯的位置是函式 getmaxidfromdb ,兩個引數分別是2和0×806fd20,這個函式位於源**的788行,基於此,我們就可以有針對性的找到問題的根源,並加以解決。
用gdb工具分析core檔案
在unix系統下,應用程式崩潰,一般會產生core檔案,如何根據core檔案查詢問題的所在,並做相應的分析和除錯,是非常重要的,本文對此做簡單介紹。例如,乙個程式cmm test tool在執行的時候發生了錯誤,並生成了乙個core檔案,如下 rw r r 1 root cmm test tool....
gdb 分析core檔案 小記
測試環境twemproxy程序突然出core退出,記錄一下gdb分析過程 解析 coredump檔案 bt 列印crash時的堆疊 gdb root proxy bin twemproxy tmp cordump.file gdb bt 0 0x00007f9f3b0d4337 in ssignal...
gdb可以用於分析core檔案
gdb可以用於分析 core 檔案。產生core的原因一般是 1.記憶體訪問越界,錯誤的陣列下標,字串越界,2。多執行緒下使用執行緒不安全的函式 3.多執行緒共享資料不加鎖保護。4.非法指標。5堆疊溢位。特別是不能使用過大的區域性變數,容易早成棧溢位。root ubuntu ulimit c 0 可...