简介:
coredump是指当程序出错而异常中断时,OS会把程序工作的当前状态存储成一个coredunmp文件。
一般情况下,coredunmp文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等;通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
coredump的生成:
1.查询coredump是否开启生成状态
命令:
ulimit -c
0表示不会产生coredump文件
2.设置coredump开启生成状态
命令:
sudo sysctl kern.coredump=1
按下Enter键后,需要输入开机密码,直接输入,完成后Enter结束
3.设置文件大小
命令:
ulimit -c unlimited
ulimit -c size
ulimit表示coredump文件大小无限制;size(单位是blocks,一般1block=512bytes)表示最大文件上限,注意size太小会无法生成该文件
4.设置coredump的路径及其权限
命令:
sudo mkdir /cores
sudo chown root:admin /cores
sudo chmod 1775 /cores
sudo chmod o+w /cores
5.添加可以崩溃的代码文件
# include <cstdio>
# include <cstdlib>
int main(void) {
int * pI = NULL;
*pI = 0;
return 0;
}
6.编译文件:
命令:
g++ -g fileName -o targetFileName
例如:g++ -g test_coredump.cpp -o test
test_coredump.cpp为代码文件,test为编译后的文件;注意:需要cd到需要编译文件的文件夹下,否则提示找不到要编译的文件
7.查看编译后当前文件夹文件:
命令:
ls -l
输出:
total 48
-rwxr-xr-x 1 anniekidsgood staff 16800 3 3 10:46 test
drwxr-xr-x 3 anniekidsgood staff 96 3 3 10:46 test.dSYM
-rw-r--r--@ 1 anniekidsgood staff 107 3 2 17:58 test_coredump.cpp
其中,test为可执行文件
8.执行可执行文件:
命令:
./fileName
例如:./test
输出:
segmentation fault (core dumped) ./test
查看/cores文件夹,多出一个文件core.12895
查看命令:
ls -lh /cores
输出:
total 7304904
-r-------- 1 anniekidsgood admin 3.5G 3 3 10:51 core.12895
9.调试core文件
命令:
lldb -c /cores/coreFileName
例如:lldb -c /cores/core.12895
输出:
(lldb) target create --core "/cores/core.12895"
Core file '/cores/core.12895' (x86_64) was loaded.
命令:
bt
输出堆栈信息:
* thread #1, stop reason = signal SIGSTOP
* frame #0: 0x000000010c993fa9 test`main at test_coredump.cpp:6:9
frame #1: 0x00000001154624fe dyld`start + 462
参考链接:
coredump详解
网友评论