linux GDB调试core文件

1. 什么是core dump?

core dump说的是操作系统执行的一个动作,当某个进程因为一些原因意外终止(crash)的时候,操作系统会将这个进程当时的内存信息转储(dump)到磁盘上,产生的文件就是core文件了,一般会以core.xxx形式命名。


2. 那些信号能够引起core dump?

经常用到的主要有这几种:
SIGSEGV  建立CORE文件   段非法错误 
SIGILL   建立CORE文件   非法指令 
SIGTRAP  建立CORE文件   跟踪自陷 
SIGBUS   建立CORE文件   总线错误 
SIGFPE   建立CORE文件   浮点异常 
SIGIOT   建立CORE文件   执行I/O自陷

具体的那些信号能产生core,可以在终端执行命令“man 7 signal”查看。


3. 设置生成core文件的环境

ulimit -c :查看core文件的大小的限制
ulimit -c unlimited :设置core文件的大小为不限制


4. 调试core文件的相关命令

4.1 启动命令:gdb exe_name core_name

4.2 具体的调试命令:

backtrace :查看堆栈信息,可以简写成bt
where : 同bt
frame num :查看堆栈中第num个frame的信息,frame可以简写成f

focus num :查看堆栈中第num个frame的具体代码信息,focus可以简写成foc。

5.查看变量

如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶
层的栈就是当前栈,如果你要查看栈下面层的详细信息,首先要做的是切换当前栈。

f n n是一个从0开始的整数,是栈中的层编号。比如:frame 0,表示栈顶,frame 1,表示栈的第二层。

info args
打印出当前函数的参数名及其值。
info locals
打印出当前函数中所有局部变量及其值。
info catch
打印出当前的函数中的异常处理信息。

p locl 查看局部变量locl 的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: GDB是一种常用的调试工具,可以用来调试Linux系统中的程序。当程序崩溃时,会生成一个core文件,可以使用GDB来分析这个文件,找出程序崩溃的原因。 以下是使用GDB调试core文件的步骤: 1. 打开终端,进入core文件所在的目录。 2. 使用GDB命令打开core文件:gdb <程序名> <core文件名> 3. 使用GDB命令查看程序崩溃时的堆栈信息:bt 4. 使用GDB命令查看程序崩溃时的变量:print <变量名> 5. 使用GDB命令查看程序崩溃时的寄存器:info registers 6. 使用GDB命令查看程序崩溃时的内存信息:x/<长度><格式><地址> 7. 使用GDB命令退出调试:quit 通过以上步骤,可以使用GDB调试core文件,找出程序崩溃的原因。 ### 回答2: GDB是一种常用的开源调试工具,可以用于调试本地和远程程序。当程序崩溃或意外中止时,它会生成一个核心转储文件,其中包含程序崩溃的原因和状态信息。在Linux中使用GDB调试core文件是一种常用的调试方法。 首先,在编译程序时需要开启debug模式以生成调试信息和core文件。可以使用-g选项编译程序: gcc -g -o program program.c 此时运行程序,程序在发生崩溃时会生成一个core文件。 接下来,使用GDB打开core文件: gdb program core 这将会打开GDB并读取core文件。接下来使用bt(backtrace)命令查看程序在崩溃时的调用栈: (gdb) bt 此时GDB会显示出程序在崩溃前所有的函数调用,可以通过查看调用栈来定位崩溃原因。 如果存在代码中的断点,则可以在GDB中设置断点并重新运行程序,也可以在GDB中使用run命令重新运行程序。一旦程序停止,可以使用GDB的各种命令进行调试,例如查看变量,设置监视点等。 总之,在Linux中使用GDB调试core文件是一种非常方便和有效的调试方法。通过GDB的命令和核心文件中的调用栈信息,开发人员可以迅速定位程序崩溃的原因,并修复程序中的问题。 ### 回答3: GDB是一个非常强大的GNU调试器,可以用于调试C, C++, Ada, Objective-C, Pascal和其他编程语言写的程序。而core文件是程序在运行时出现错误或crash时产生的一种状态转储文件,里面包含了当前进程在运行时内存中的所有信息,为后续调试提供了很大的帮助。 在Linux中使用GDB调试core文件,首先需要保证已经编译生成了包含调试信息的可执行文件,并且程序在运行时出现了错误或crash导致生成了core文件。接下来,可以按照以下步骤进行调试: 第一步:启动GDB并附加到core文件所对应的进程中 gdb 可执行文件core文件名 例如: gdb myprogram core.1234 第二步:查看崩溃时产生的具体信息 使用命令“bt”(backtrace)查看代码在运行时堆栈中的位置,这样可以很容易地定位崩溃的位置,例如: (gdb) bt #0 0x00007ffff794e565 in raise () from /usr/lib/libc.so.6 #1 0x00007ffff794fd4b in abort () from /usr/lib/libc.so.6 #2 0x00005555555545d9 in foo(int) () #3 0x00005555555546a5 in main () 这样就可以看到,崩溃出现在foo(int)函数内。 第三步:查看当前函数的代码 使用“list”命令可以查看当前函数的代码,例如: (gdb) list 17 void foo(int value) { 18 if (value == 0) { 19 printf("divide by zero!\n"); 20 abort(); 21 } 22 printf("%d\n", 100 / value); 23 } 第四步:查看变量 使用“print”命令可以查看特定变量,例如: (gdb) print value $1 = 0 此时就可以看到,value的是0。 通过这些步骤,可以有效地定位程序在运行时出现问题的地方,并且查看相应变量,为后续修复程序提供了很大的帮助。此外,GDB还支持许多其他的调试功能,例如设置断点、单步调试、查看寄存器等,可以根据具体情况,选择适当的调试方法来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值