gdb pid 线程_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是进程ID,

可通过>ps aux | grep

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

(GDB) attach

(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、付费专栏及课程。

余额充值