程式執行錯誤,core dump 時,會受dump file 大小限制。
這是 kernel 的 參數。
用 ulimit 可以列出一堆 kernel 參數。
其中 -c 就是 core dump 的 size limit
$ulimit -c 0 $ulimit -c unlimited unlimited-- 系統原來是 0 (不存 core dump file),改成 unlimited, 全部都存下來。
然後寫一個 會 core dump 的程式:
#include <stdio.h> #include <stdlib.h> int main() { int *A = NULL; *A = 0x01; return 0; }compile with -g option (debug ON)..
gcc -g main.c然後執行 a,out,產生 core dump..
之後,啟動 gdb 吃下 core dump file (core) 跟 執行檔(含 debug symbol):
gdb -c core a.out ... .. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x0000aaaaac4a66f4 in main () at main.c:8 8 *A = 10;會停在發生 core dump 的 code..
然後舊可以用 gdb command 來看 source (l), backstrace (bt), 看變數 (p *A)...
這個 core 跟平台有關,所以在 arm 上產生的 core file,拿到 x86 來看的畫,要用 cross-tool 的 arm gdb 來啟動。
一些 gdb 的操作
沒有留言:
張貼留言