搜尋此網誌

2015年3月4日 星期三

How to enable core dump in Android

什麼是core dump?
簡單來說就是可以幫助你快速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的話則需要另外的方式
如果你的程式是透過 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 位址

沒有留言:

張貼留言