linux可以通過如下命令開啟core dump功能:
ulimit -c unlimited
sudo sh -c 'echo "/tmp/core.%t" > /proc/sys/kernel/core_pattern'
開啟core dump之後,程序崩潰時會產生一系列/tmp/core*的檔案
android中應用程式崩潰時,產生一系列/data/tombstones/tombstone_0*檔案,該檔案包含呼叫資訊和暫存器資訊;
1.1.1linux程序除錯命令
gdb 要除錯的程式 崩潰的檔案
如:gdb stack7 /tmp/core.1500560146
進入gdb後,看到如下內容:
[new lwp 16779]
core was generated by `./unlink'.
program terminated with signal 6, aborted.
#0 0xb7769428 in __kernel_vsyscall ()
(gdb) x/10s $esp
0xbf9330a4: "x8\223\277\006"
0xbf9330aa: ""
0xbf9330ab: ""
0xbf9330ac: "\213a"
0xbf9330af: ""
0xbf9330b0: "\037\216]\267\364/u\267\340\061\223\277e\304]\267\006"
0xbf9330c2: ""
0xbf9330c3: ""
0xbf9330c4: "`1\223\277"
0xbf9330c9:
黃色的是程式最後崩潰的地方,x/10s $esp指令是檢視崩潰時棧頂上的內容;
如果要檢視崩潰時呼叫過程,需要用bt指令:
(gdb) bt
#0 0xb7769428 in __kernel_vsyscall ()
#1 0xb75d8e1f in raise () from /lib/i386-linux-gnu/libc.so.6
#2 0xb75dc465 in abort () from /lib/i386-linux-gnu/libc.so.6
#3 0xb761548a in ?? () from /lib/i386-linux-gnu/libc.so.6
#4 0xb7620002 in ?? () from /lib/i386-linux-gnu/libc.so.6
#5 0xb76206e5 in ?? () from /lib/i386-linux-gnu/libc.so.6
#6 0x080486dd in handle_cmd ()
#7 0x080489b7 in main ()
另外 print指令可以檢視一系列的函式的記憶體位址,如system函式位址
(gdb) print free
$2 = {} 0xb75d13d0
(gdb) print system
$3 = {} 0xb75970b0
1.1.2除錯android應用崩潰時的檔案
tombstone檔案裡有崩潰時的記憶體資訊,如棧上,以及程序資訊,以及呼叫過程,只需要利用android自帶的工具,如addr2line、ndk-stack分析即可,具體可以執行搜尋。也可以參考如下文章:
linux程序除錯
除錯正在執行的程序,首先需要把程序執行起來,然後通過ps aux| grep "程序名"來檢視當前程序的id號,然後通過gdb -pid 程序id號來除錯程序,檢視記憶體資訊,下完斷點或者檢視完記憶體資訊之後,一定要退出gdb除錯,否則程式無法繼續執行。
android應用除錯
android無原始碼之gdb動態除錯
*0x2a001ff4=0x4007238d
2)檢視某陣列中的內容:p/x *陣列名@陣列長度,如p/x *notes@3
GDB除錯技術
gnu的偵錯程式稱為gdb,該程式是乙個互動式工具,工作在字元模式。在 x window 系統中,有乙個gdb的前端圖形工具,稱為xxgdb。gdb 是功能強大的除錯程式,可完成如下的除錯任務 設定斷點 監視程式變數的值 程式的單步執行 修改變數的值。在可以使用 gdb 除錯程式之前,必須使用 g ...
gdb除錯技術
1 使用gdb除錯 除錯程式 當程式出現執行錯誤 bug 時,我們需要除錯程 序,將錯誤找出並解決 debug 參考 單步除錯 vc下面的除錯程式的方法 除錯手段分為兩種 1 單步除錯 使用偵錯程式,結合斷點,觀察變 量和記憶體的值。2 列印除錯 將關鍵資訊用printf等函式輸出分析 gdb除錯 ...
GDB常用除錯命令
呼叫gdb編譯需要在cc後面加 g引數再加 o root redhat home gdb 除錯檔案 啟動gdb gdb l 字母l 從第一行開始列出原始碼 gdb break n 在第n行處設定斷點 gdb break func 在函式func 的入口處設定斷點 gdb info break 檢視斷...