在一些性能相关的代码段,往往缺少日志,但我们又想在断点命中的时间,能够打印出某些详细信息出来,或在断点命中的时间,避免重复手工敲击print过程,在GDB中如何办?
答案是:可以借助断点的自动command命令机制,把想要执行print命令加入进去即可。PS:结合条件断点,会让此技巧更外发扬光大。
例如:
(gdb) b someFile:xrow [ if somevar == 0x2000014 ]
[ (gdb) set pagination off ]
(gdb) command $breakpoint_num
>print /x someStruct
[>continue]
>end
(gdb) continue
附录
- command自动命令序列中end结束命令是必须的
- 在command自动命令序列中加入continue命令,可以使得断点对于程序的运行尽量小,在某些场合会比较有用。
- 在连续不断打印的情况下,需要事先特殊设置·set pagination off·,可以关闭掉分页确认的提示,以利于连续输出。