Mac coredump文件

2022-03-03  本文已影响0人  苍眸之宝宝

简介:

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详解

上一篇下一篇

猜你喜欢

热点阅读