最近要用coredump打印 c++代碼在 NDK 環境中編譯生成的可執行文件 所生成的錯誤信息,說白了就是爲了調試。
然後百度怎麼用coredump後 就一頓操作 。發現 設置完 ulimit -c unlimited
後再次執行程序 ,還是不會打印帶 (core dumped) 的錯誤Segmentation fault (core dumped)
,也沒有你們文章所提到的什麼 /proc/sys/kernel/core_uses_pid 和 /proc/sys/kernel/core_patten 文件。excuse me ? 原來 Android系統的linux內核有沒有打開coredump功能 。
kernel中打開coredump功能
1.到 系統源碼 kernel目錄下執行 make menuconfig
(code不同可能文件目錄不同,根據項目來具體操作)
2. 選擇 Userspace binary formats
選項
3.打開Enable core dump support
功能,然後保存
配置coredump的存儲位置
一般臨時更改存儲位置 只需要將core文件存儲位置寫入到 /proc/sys/kernel/core_pattern
#echo "1" > /proc/sys/kernel/core_uses_pid
#echo "/local/log/core-%e-%p" > /proc/sys/kernel/core_pattern
//把dump文件存放目錄改到local/log下。
但是系統重啓後,該配置會失效.
所以對於android系統可以將配置該文件的命令寫入到init.rc(不同項目可找到對應rc文件)中.
setrlimit 4 -1 -1
mkdir /data/coredump 0777 system system
write /proc/sys/kernel/core_pattern /data/coredump/core.%e.%p
測試代碼: