设为首页 加入收藏

TOP

[原创]GDB调试指南-断点设置(二)
2019-02-27 20:08:42 】 浏览:268
Tags:原创 GDB 调试 指南 -断点 设置
置断点,可以使用下面的方式:

1rbreak printNum*

所有以printNum开头的函数都设置了断点。而下面是对所有函数设置断点:

1#用法:rbreak file:regex
2rbreak . 
3rbreak test.c:. #对test.c中的所有函数设置断点
4rbreak test.c:^print #对以print开头的函数设置断点

设置临时断点

假设某处的断点只想生效一次,那么可以设置临时断点,这样断点后面就不复存在了:

1tbreak test.c:l0  #在第10行设置临时断点

跳过多次设置断点

假如有某个地方,我们知道可能出错,但是前面30次都没有问题,虽然在该处设置了断点,但是想跳过前面30次,可以使用下面的方式:

1ignore 30

其中,1是你要忽略的断点号,可以通过前面的方式查找到,30是需要跳过的次数。这样设置之后,会跳过前面30次。再次通过info breakpoints可以看到:

1Num     Type           Disp Enb Address            What
21       breakpoint     keep y   0x00000000004005e8 in printNum2 at test.c:16
3    ignore next 30 hits

根据表达式值变化产生断点

有时候我们需要观察某个值或表达式,知道它什么时候发生变化了,这个时候我们可以借助watch命令。例如:

1watch a

这个时候,让程序继续运行,如果a的值发生变化,则会打印相关内容,如:

1Hardware watchpoint 2: a
2Old value = 12
3New value = 11

但是这里要特别注意的是,程序必须运行起来,否则会出现:

1No symbol "a" in current context.

因为程序没有运行,当前上下文也就没有相关变量信息。

rwatch和awatch同样可以设置观察点前者是当变量值被读时断住,后者是被读或者被改写时断住。

禁用或启动断点

有些断点暂时不想使用,但又不想删除,可以暂时禁用或启用。例如:

1disable  #禁用所有断点
2disable bnum #禁用标号为bnum的断点
3enable  #启用所有断点
4enable bnum #启用标号为bnum的断点
5enable delete bnum  #启动标号为bnum的断点,并且在此之后删除该断点

断点清除

断点清除主要用到clear和delete命令。常见使用如下:

1clear   #删除当前行所有breakpoints
2clear function  #删除函数名为function处的断点
3clear filename:function #删除文件filename中函数function处的断点
4clear lineNum #删除行号为lineNum处的断点
5clear f:lename:lineNum #删除文件filename中行号为lineNum处的断点
6delete  #删除所有breakpoints,watchpoints和catchpoints
7delete bnum #删除断点号为bnum的断点

总结

本文介绍了常见的断点设置方法,断点设置之后,可以便于我们后期观察变量,堆栈等信息,为进一步的定位与调试做准备。

最新内容:GDB调试指南-断点设置

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言数组越界导致死循环问题 下一篇江苏快三大小单双回血技巧公式推..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目