linux gdb 进程调试

本文介绍了在Linux环境下使用GDB进行程序调试的方法,包括设置断点、通过core文件分析程序崩溃原因,以及多线程调试技巧,如查看堆栈信息、局部变量和线程状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux环境下,编写应用程序,有句话说的“写一段代码,编译通过,半小时救过了;写一段代码编译没有通过,半天就过了”,这句话说的是调试代码所花费的时间远远会超过自己的预期,所以在linux环境下如何更好的调试自己的代码,对于提高工作效率无疑是一剂良药。


调试工具: gdb 

1、很多时候,程序编译通过之后,运行却没有得到期望的结果,咋一看程序逻辑、代码都没有问题,这个时候就需要用到gdb了。

命令格式:gdb  程序名

root>/root> gdb ../bin/exename

回车运行之后,首先设置断点,命令格式:break   源程序文件名:行号,  break 也可简写为b

root>/root> b a.c:80

回车运行,就可以通过  step 、 next 两个命令进行单步、下一步调试了


2、还有一些时候,程序编译通过之后,开始运行的一段时间都是没有问题的,特别是对于服务端程序,程序崩溃了,查无对症啊,这是最痛苦的时候,不过这个时候,我们设置linux环境,通过程序崩溃产生的core文件来进一步分析原因

命令:gdb  程序名  core文件名

        root>/root>  gdb  ../bin/exename  core.232123

        回车运行之后,core文件时程序崩溃时将当时程序的内存映射到文件中了,崩溃绝大部分时候是因为内存出错了,所以在查看时,注意各个指针的值是否正常

       root>/root>  bt  

       该命令显示堆栈信息,  也可以用where 

其他命令:  info local   查看局部变量

                              print      打印

                              info  register   查看寄存器变量

                               frame    跳到第几帧 


3、服务端程序,几乎会用到多线程,对于多线程的调试也是最头疼的,下面总结了一些多线程调试的方法

如果多线程程序在运行过程中被挂起了,可能适用于锁的互斥引起的,这是可以:

gdb detach + pid    可以调试正在运行的进程
info threa
d
thread N
  可以查看第n个线程   bt,调出堆栈信息    



也可以 info thread ,切换到某个线程后, set scheduler-locking on/off 让其他线程挂起/运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值