Linux下进行gdb调试

一、用途

如果程序崩溃后产生了core dump文件,gdb可以通过分析core dump文件,找出程序crash的位置,调用堆栈等用于找出问题原因的关键信息

二、 启动GDB的几种方式

1.使用GDB加载程序,在GDB命令行启动运行

这是经典的使用GDB的方式。程序可以通过GDB命令的参数来加载,也可以在进入GDB控制台后,通过file命令来加载。

2.附加GDB到运行中的进程
GDB可以直接通过参数的方式,附加到一个运行中的进程。也可以在进入GDB控制台后,通过attach命令附加到进程。

需要注意的是一个进程只允许附加一个调试进程,如果被调试的进程当前已经出于被调试状态,那么要么通过detach命令来解除另一个GDB进程的附加状态,要么强行结束当前附加到进程的GDB进程,否则不能通过GDB附加另一个调试进程。

通过GDB命令附加到进程gdb --pid [pid]# 在GDB控制台内,通过attach命令附加的进程gdb(gdb) attach [pid]

3.调试core文件
在程序Crash后,如果生成了core文件,我们可以通过GDB加载core文件,调试发生异常时的程序信息。core文件是没有限制当前机器相关信息的,我们可以拷贝core文件到另一台机器进行core分析,但前提是产生core文件的程序的符号表,需要和分析core文件时加载的程序的符号表保持一致。

使用GDB调试core文件
使用GDB加载core文件进行异常调试gdb [program] --core [core file]

4.使用GDB加载程序并自动运行
在自动化测试场景中,需要程序能够以非中断的方式流畅地运行,同时又希望附加GDB,以便随时可以了解程序的状态。这时我们可以使用–ex参数,指定GDB完成程序加载后,自动运行的命令。

三、常用

查看堆栈信息
当程序崩溃可以使用,where命令,查看死在那个位置。

bt,查看函数栈

f/frame 切换到当前调用线程的指定堆栈

f 2 进入第2栈

查看线程
i threads 【查看所有线程】

t num 【进入num线程】

thread 【查当前线程】

thread 2 【切换到第二个线程】

显示源码
查看源码:list(l),默认显示10行

l 函数名
l 数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值