首页 > 解决方案 > 即使值不变,如何让 gdb 在观察点写入时中断

问题描述

我尝试通过编写一个日志文件来跟踪线程应用程序的过程,该文件应该将每个写入操作记录到一个全局变量,即使值没有改变。Gdb 文档指出,“监视”仅在值更改时才会中断。问题是使用“awatch”记录所有访问记录太多了。有没有办法记录所有的,改变而不是,写操作?到目前为止我的脚本:

set pagination off
set logging file variable_writes.txt
set logging on

file EXECUTABLE

# need hardware watchpoint for multi thread support
watch SOME_VARIABLE
commands
    silent
    p /x SOME_VARIABLE
    bt 2
    continue
end

run

set logging off
quit

标签: gdbwatch

解决方案


似乎获得非修改写入的唯一方法是使用 awatch。它通过在感兴趣的部分周围的狭窄范围内启用/禁用观察点来限制记录的数据量。

我使用的最终脚本:

set pagination off
set output-radix 16
set logging file trace_variable.txt
set logging on

file EXECUTABLE

# need hardware watchpoint for multi thread support
awatch SOME_VARIABLE
commands 1
    bt 1
    continue
end

break SOME_POINT_BEFORE
commands 2
    enable 1
    continue
end

break SOME_POINT_AFTER
commands 3
    disable 1
    continue
end

# Watchpoint is enabled/disabled when reaching other breakpoints
# Starting disabled
disable 1

run

set logging off
quit

推荐阅读