能否让GDB在递归函数首次进入时触发断点?
解决GDB递归函数断点仅首次触发的问题
要实现只在递归函数foo的首次调用时暂停,完全不用额外断点或复杂动作,直接给断点加个简单条件就行:
- 在GDB里执行命令:
break foo if $_caller_id != "foo"
原理说明
GDB内置的$_caller_id变量会返回当前函数的直接调用者名称:
- 首次调用
foo时,调用者是其他函数(比如main),此时$_caller_id不等于foo,条件成立,断点触发; - 递归调用
foo时,调用者就是foo自己,条件不成立,断点不会触发。
注意事项
如果是C++的重载函数,需要带上完整函数签名(用单引号包裹避免解析错误),比如:break 'foo(int)' if $_caller_id != 'foo(int)'
内容的提问来源于stack exchange,提问作者John H.
相关产品推荐
相关产品推荐

