《软件调试艺术》读后感四
1、条件断点
仅仅有符合某种条件时才在断点处停止。
类似于监视点的工作方式,每当该变量的值发生变化时,监视点都会中断。条件断点仅仅会在怀疑有问题的代码处当变量呈现该怀疑值时才中断。
设置条件断点: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等作为推断,自己写的函数也是一个道理。
正常断点是无条件操作,而条件断点是有条件操作,条件达到之后才干暂停。
2、断点命令列表
使用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将在完毕命令列表中的命令后继续自己主动运行程序。
3、宏的创建
假设你的这些命令还会在其他程序中使用,那么你能够使用GDB中的define命令创建宏。
创建宏print-and-go:
define print-and-go=> 长久保存则将其放在.gdbinit文件里。
printf $arg0,arg1
continue
end
这里假设要给它传送參数,则參数之间没有不论什么的符号。查看宏使用show user命令,能够得到全部的宏列表。