我正在尝试定义一个命令链,该命令将在 gdb 中的断点之后调用:
break some_function
commands
up
next
printf "some_string"
continue
end
在这种情况下(例如)我想在 some_function 处中断,进入堆栈帧并通过下一个命令跳转到该函数后面,然后打印“some_string”(或者可能是某个变量,该变量已由函数),然后继续。但这不起作用,因为 gdb 将在下一个命令后停止并等待用户输入某些内容,而忽略以下命令。
编辑: 好吧,我上面给出的例子并不完全符合我的描述。我真正想要的(感谢评论者 Nikolai,见下文)是这样的:
break some_function
commands
finish
printf "some_string"
continue
end
这将在“some_function”处中断,执行该函数,在执行“some_function”后立即返回并打印字符串“some_string”。我之前在下一个命令中遇到的问题现在出现在 finish 命令中:执行此命令后将停止,gdb 将等待用户输入,忽略以下 printf 和 continue 语句。抱歉,这个问题有点令人困惑。我自己对此并不满意,但再次发布它并不是更好的解决方案(因为评论会丢失并且会交叉发布)。
最佳答案
好吧,我想我自己找到了答案: gdb 似乎在内部设置了完成和下一个命令的断点。然而,我们可以定义一个钩子(Hook)来克服在这个断点处的破坏。我认为最好的方法是生成一个自己的完成版本(或下一个命令)以避免副作用,所以这就是人们可以做的:
define myfinish
finish
end
define hook-myfinish
printf "some_string"
continue
end
break some_function
commands
myfinish
end
建议在中断命令部分的开头使用silent
语句,以抑制
中断时的附加输出:
break some_function
commands
silent
myfinish
end
关于c - 如何防止 gdb 在下一个命令后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261404/