GDB调试器(调试程序/进程/线程)

程序调试

(1)断点设置

A.设置断点

(GDB) break <函数名> or b <函数名>:对当前正在执行的文件中的指定函数设置断点。

(GDB) break <行号> or b <行号>:对当前正在执行的文件中的特定行设置断点。

(GDB) break <文件名:行号> or b <文件名:行号>:对指定文件的指定行设置断点。最常用的设置断点方式。

(GDB) break <文件名:函数名> or b <文件名:函数名>:对指定文件的指定函数设置断点。

(GDB) break <+/-偏移量>:当前指令行+/-偏移量出设置断点。 or b <+/-偏移量>

(GDB) break <*地址>:指定地址处设置断点。or:b <*地址>

B.查看、删除断点

(GDB) info break :显示所有断点以及监视点。or:(GDB) i b

(GDB) delete <编号>:删除编号指向的断点或者监视点。or d <编号>

(GDB) clear <行号>:删除该行的断点。

(GDB) clear <文件名:行号>:删除改行的断点。

C.设置无效、有效断点

(GDB) disable <断点编号> : 当前断点设置为无效。

(GDB) enable <断点编号>:当前断点设置为有效。

(2).监视点

可以监视某个变量,在变量被访问或者被修改时程序会在当前点进入断点。删除,查看监视点的方式与断点相同。设置监视点方式如下

(GDB) watch <表达式>:表达式发生变化时暂停。

(GDB) awatch <表达式>:表达式访问或者改变时暂停。

(GDB) rwatch <表达式>:表达式被访问时暂停。

(3).条件断点

在调试程序过程中,有时候只想在某个条件下停止程序,然后进行单步调试,而条件断点就是为此而设计。下面是条件断点的操作方式:

(GDB) b <断点> if <条件表达式> : 例如:b main.cpp:8 if x=10 && y=10

(GDB) condition <断点编号>:删除该断点的条件。

(GDB) condition <断点编号> <条件表达式>:修改断点条件。例如:condition 1 x=10 && y=10

(4).断点命令

每次断点发生时候,想要查看的变量很多时,如果每个变量都手动print则需要浪费很多时间。断点命令可以在断点发生时批量执行GDB命令。断点命令的设置方式:

(GDB) commands <断点编号>

(GDB) >print x

(GDB) >print y

(GDB) >end

首先输入GDB命令commands <断点编号>然后回车,这时候会出现>提示符。出现>提示符后可以输入断点发生时需要执行的GDB命令,每行一条,全部输入完成后输入end结束断点命令。

(5).反复执行

单步执行时如果进入了不关心的函数,你想立即跳出函数;或者进入了大循环中,你想立即循环。

(GDB) ignore <断点编号> <次数>:忽略N次断点。

(GDB) c N: 执行N次指令,会忽略断点。

(GDB) s/stepi/n/nexti N:往后执行N行,不会忽略断点。

(GDB) finish:执行完当前函数后停止,不会忽略断点。

(GDB) until:执行完当前循环后停止,不会忽略断点。

(GDB) until <地址>:执行到指定地址停止。

(6).设置变量值

对变量的值进行控制,可以更快的调试自己的程序。下面就是设置变量值的方法:

(GDB) set variable <变量> = <表达式>:将变量的值设定为指定表达式的值。如 set variable x=10

(7).手动生成转储文件

(GDB) generate-core-file or:gcore

 

调试在线进程

(1).启动GDB时链接目标进程

在启动GDB的时候,通过参数-p指定目标进程,就可以进入调试状态。刚链接成功后,程序是暂停运行状态,

可设置断点等操作,后输入(GDB) c 命令继续运行。

>gdb -p <PID>:PID是进程ID,

可通过>ps aux | grep <程序名> 获

(2).GDB中链接目标进程

(GDB) attach <PID>

(3).断开链接

(GDB) detach

 

调试多线程程序

(1).查看线程

(GDB) info thread查看所有线程信息,or:i thr

(2).切换到指定线程

(GDB) thread <线程编号>:选中出现问题的线程,or:thr <线程编号>

(3).调试守护进程

守护进程在启动好子进程后,会自动关闭主进程,如果没有设定监控模式的话,GDB会提示断开与进程的链接。所以必须设定监控对象,设置方式:

(GDB) set follow-fork-mode child/parent

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值