簡單來說就是可以幫助你快速debug的工具,wiki上有比較詳細的解釋
http://en.wikipedia.org/wiki/Core_dump
如何確認系統有無啟動core dump?
透過 ulimit -c 如果返回 0代表沒有啟動core dump
如何啟動?
設定ulimit -c ulimited即可
產生的core dump在哪裡?
例如: Test 程式放在/usr/local/bin下面,則產生的core dump就在同樣目錄下且預設名字叫core的檔案。
如果要修改coredump存放的位置,可以修改/proc/sys/kernel/core_pattern
例如: echo /data/core > /proc/sys/kernel/core_pattern
如果你的程式是透過 Android的 init程式帶起來的
例如:
service dtvloaderserver /system/bin/dtvloaderserver
class main
user root
則你另外需要設定以下的方式在init.rc裡面
加上下面的修改
setrlimit 4 -1 -1
mkdir /data/core 0777 system system
write /proc/sys/kernel/core_pattern
/data/core/%t-%e-%p-%c.core
%t -- dump時間 (1970年1月1日0:00開始算起的秒數)
%e -- 執行檔名
%p -- PID
%c -- dump大小上限
如何使用core dump來debug?
gdb -c xxx.core ./test
怎麼產生core dump? 以下是一個範例
int test(RpcClient& client)
{
int *a = NULL;
*a = 0x1; à透過存取位址0來產生coredump
return 0;
}
執行./ClientTest -test 發生segmentation fault (core
dumped) à代表產生core dump
怎麼使用coredump
debug?
使用GDB可以馬上定位到錯誤的code 位址
沒有留言:
張貼留言