只有符合某种条件时才在断点处停止。类似于监视点的工作方式,每当该变量的值发生变化时,监视点都会中断。条件断点只会在怀疑有问题的代码处当变量呈现该怀疑值时才中断。
设置条件断点:breakbreak-args if (conditon)如:break if (i==700) condition 6999
条件可以是:
1、 相等、逻辑和不想等运算符(<,<=,==,!=、,>,>=,&&,||等)如break 180 if string == null && I < 0
2、 按位和以为运算符等(&,|,^,>>,<<等)如break test.c:34 if(x & y) == 1
3、 算术运算(+,-,*,/,%)如break myfunc if i % (j + 3) != 0
自己写的函数、或库函数经过链接之后都可以调用,比如在这种环境中,可以用if strlen(mystring) == 0等作为判断,自己写的函数也是一个道理。
正常断点是无条件操作,而条件断点是有条件操作,条件达到之后才能暂停。
使用commands命令设置命令列表:
Commandsbreakpoint-number
……
commands
……
end
例如:
$gdb Fibonacci
break Fibonacci
commands 1
printf “Fibonacciwas passed %d.\n”, n
end
如果觉得输出太冗余,可以使用silent命令,它需要在命令列表的第一个输入,使用GDB更安静地触发断点。
如:
command 1
silent
printf “…….”
end如果命令列表中的最后一个命令是continue。GDB将在完成命令列表中的命令后继续自动执行程序。
如果你的这些命令还会在其它程序中使用,那么你可以使用GDB中的define命令创建宏。
创建宏print-and-go:
define print-and-go=> 长久保存则将其放在.gdbinit文件中。
printf $arg0,arg1
continue
end
这里如果要给它传送参数,则参数之间没有任何的符号。查看宏使用show user命令,可以得到所有的宏列表。
原文地址:http://blog.csdn.net/qianligaoshan/article/details/46384173