我想在gdb断点上设置一个条件,只有在回溯中出现某个函数名时才会中断。最好的方法是什么?
答案 0 :(得分:3)
比Python脚本更简单的解决方案是使用temporary breakpoint。
看起来像这样:
b ParentFunction
command 1
tb FunctionImInterestedIn
c
end
每次进入ParentFunction
时,您都会在您真正感兴趣的功能上设置一次性断点,然后继续运行(可能直到您达到该断点)。 / p>
由于您在FunctionImInterestedIn
上只打破一次,如果在FunctionImInterestedIn
的上下文中多次调用ParentFunction
并且您想要破解,则无法工作每次调用。
答案 1 :(得分:2)
我不确定如何完全满足您的要求,但是如果您可以访问相关函数的源代码,可能的解决方法是在开始时将一些全局布尔变量设置为true
函数的函数,并在函数退出之前将其设置为false
。然后你可以设置一个条件断点(使用condition
命令),只有当这个布尔变量为true
时才会停止。
答案 2 :(得分:0)
替代rix0rrr的答案:
b main
commands
set $inParentFunction = 0
c
end
b ParentFunction
commands
set $inParentFunction = 1
c
end
b FunctionImInterestedIn if ($inParentFunction)