如何设置GDB监视内存地址时打印回溯而非中断程序?
在GDB中设置自动打印回溯的写监视断点
当然可以实现,核心是给watch断点绑定自动执行的命令序列,具体步骤如下:
首先设置针对目标内存地址的写监视断点:
如果你要监视的是具体内存地址(比如0x12345678),执行:watch *0x12345678如果是某个变量(比如
global_var),直接执行:watch global_varGDB会返回该断点的编号(比如
Watchpoint 2),记下来这个编号。接着给这个断点绑定触发后的自动命令:
执行commands 断点编号(比如断点编号是2就用commands 2),然后输入要自动执行的命令:commands 2 bt # 打印完整栈回溯 # 如果你只想打印前N层栈帧,可以改成 bt N,比如 bt 5 continue # 自动继续执行程序 end
这样设置后,当目标地址被写入时,GDB会自动打印当前的调用栈回溯,然后立刻继续程序执行,不会中断到命令行等待手动输入。
内容的提问来源于stack exchange,提问作者user997112
相关产品推荐
相关产品推荐

