GDB使用

 
1、启动程序

在命令行下输入" gdb ",可直接进入gdb调试程序。然后通过" file <目标程序> "可以将所要调试的程序加载到gdb中。

在命令换下输入" gdb <目标文件> "可直接启动gdb并加载目标文件。

2、设置断点

设置断点是调试程序的重要手段。程序会在断点处停止执行,然后开发人员就可以检查当前程序运行的上下文信息,或是进行单步执行。

break function 在某个函数入口处设置断点

break filename:function 考虑到有可能存在同名的函数,可以再附加上文件名作为标识

break linenum 在当前文件的第linenum行设置断点

break filename:linenum 在指定文件的第linenum行设置断点

break ... if cond 当指定的条件满足时才会在断点处停止

info breakpoint 显示当前设置的断点的信息

clear 清除所有断点

delete breakpoint num 每个断点都有一个编号,可以使用info breakpoint查看。该命令用于删除断点号为num的断点

3、执行程序

当程序支行到断点停下来时,就可以借助于执行命令按照期望的方式驱动程序运行了。

run 驱动程序开始运行,该命令一般是在装载了可执行文件后,开始运行时所致行的命令。如果程序有命令行参数,可直接附加在run后面,例< run -c -f >

next 执行下一条语句,子程序调用作为一步执行,不会进入到子程序内部

step 单步执行,遇到子程序调用时,会进入到子程序内部

finish 执行完当前子程序。当进入子程序调试完毕之后,可使用finish跳出该子程序

continue 继续运行,直到程序结束或是遇到断点

4、查看信息

gdb对于调试的最重要的功能就是可以查看程序运行的上下文信息,在这方面为开发人员提供了丰富的命令。

print 打印出程序上下文的信息。具体可以是变量的值<print a>、子程序运行的结果<print add(a,b)>或是其它的有意义的组合。详细功能可自行挖掘。

display 显示出程序上下文的信息。与print功能基本相似,只是在每次程序停下来后都会自动打印出信息,方便在单步调试时对变量的追踪,不必每次都用print进行打印。

bt 显示程序运行的栈信息。

注意:gdb只能显示全局变量和当前栈内的局部变量的信息。在打印变量信息时如果提示找不到该变量,需要检查该变量是否在当前断点的上下文内。

5、连接进程

有时候程序不是在gdb中启动的也想对它进行调试,这时就可以首先启动gdb,然后使用attach命令连接到该进程上去,就可以进行调试了。

attach pid 将gdb连接到进程号为pid的进程上去,连接上去之后,该进程会停止执行。

detach 调试结束之后,可以使用该命令取消连接,程序继续运行。

注:连接进程需要知道进程号,可以使用ps -aux 来查看。如果要连接线程,可以使用ps -eLm来查看

6、对多线程的支持

使用info threads可以查看运行的线程

切换线程:使用 thread THREADNUMBER 进行切换,THREADNUMBER 为线程号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值