gdb - 即使值不变,如何让 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
解决方案
似乎获得非修改写入的唯一方法是使用 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
推荐阅读
- c# - 如何从 C# HttpClient 中的传输编码中获取 UTF8 格式的内容?
- javascript - 在要计数的对象经常变化的模型中计数属性
- php - Symfony 4.1 组件 - 依赖注入问题
- java - Maven 阴影插件无法执行目标?
- checkbox - 复选框单击量角器角度
- python - 将 IP 地址创建为十六进制值
- javascript - 酶`.find(selector)`似乎没有找到选择器
- ag-grid - Ag-Grid 链接与组中单元格中的链接
- html - 仅从我的 angular4 组件渲染 html
- python - 通过列表中的用户输入将数字分配为Python中的整数