2020/12/4

ulimit, core dump and gdb

Black 教的。想不到,很古老以前就有了。

程式執行錯誤,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 的操作

沒有留言:

張貼留言