置断点,可以使用下面的方式:
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 1 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
断点清除
断点清除主要用到clear和delete命令。常见使用如下:
1clear
总结
本文介绍了常见的断点设置方法,断点设置之后,可以便于我们后期观察变量,堆栈等信息,为进一步的定位与调试做准备。
最新内容:GDB调试指南-断点设置