gdb_调试core文件
1. core文件的作用
Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置与可执行程序位于同一目录下,文件名为core.xxx,其中是xxx某一数字。
2. 开启或者关闭core文件
2.1 查看
ulimit -c
可以查看当前是否打开了core
文件,0
表示关闭,
ulimit -c
2.2 打开core
ulimit -c unlimited
2.3 but
该配置只在当前会话有效,如果想永久生效,/etc/security/limits.conf
3. 调试core
3.1 造一个会产生core的程序
// filename=coremain.cpp
#include <stdio.h>
void core_test1()
{
int i = 0;
scanf("%d",i); // 此处会报错,正确写法时“&i”
printf("%d\n",i);
}
int main()
{
core_test1();
return 0;
}
3.2 编译
要带“-g”进行编译
g++ -g coremain.cpp -o coremain
3.3 运行
[root@tianyiyi core_test]# ./coremain
12
段错误(吐核)
//此时会在当前目录下产生core文件
3.4 查看core文件,定位core位置
[root@tianyiyi core_test]# file core.66950
[root@tianyiyi core_test]# gdb coremain core.66950
// 进入gdb后
(gdb) bt
#0 0x00007fcdeb5fc301 in __GI__IO_vfscanf () from /lib64/libc.so.6
#1 0x00007fcdeb60b3ab in scanf () from /lib64/libc.so.6
#2 0x00000000004005c0 in core_test1 () at coremain.cpp:6
#3 0x00000000004005df in main () at coremain.cpp:12
// 或者
(gdb) where
#0 0x00007fcdeb5fc301 in __GI__IO_vfscanf () from /lib64/libc.so.6
#1 0x00007fcdeb60b3ab in scanf () from /lib64/libc.so.6
#2 0x00000000004005c0 in core_test1 () at coremain.cpp:6
#3 0x00000000004005df in main () at coremain.cpp:12
3.5 进入堆栈,查看局部变量
使用命令f N
,即可进入某个栈,查看具体的局部变量信息。
- f :(frame)的简称
- N :栈号