gdb - gdb - 观察全局变量
问题描述
我想在主函数开始之前看一个全局变量。一种可能的解决方案是创建一个初始化全局变量并在函数上设置断点的函数:
int Init()
{
return 0;
}
int globalX = Init();
//gdb: break Init
//gdb: run
//gdb: awatch globalX
是否可以在不定义函数断点的情况下观察全局变量(在主函数开始之前)?watch globalX
不起作用。
解决方案
是否可以在不定义函数断点的情况下观察全局变量(在主函数开始之前)?
是的。但是,只有在程序启动后变量的值发生变化时,GDB才会停止,而对于使用常量值初始化的变量,它设置为该值的时间是在程序启动之前。
更确切地说:
int foo;
int bar = 42;
int baz = func();
该变量foo
在段中分配,并且在进程中的第一条指令执行之前.bss
具有值。0
同样,变量bar
在段中分配.data
,并且在第一条指令之前具有值42
(段中的相应位置在.data
磁盘上具有该值,并且mmap
在进程启动之前将其简单地编入进程)。
该变量baz
在该部分中分配.data
,并被动态初始化——这是唯一在进程启动后实际更改其值的变量。您可以watch
使用该变量并观察初始化发生的位置,而无需在func()
.
推荐阅读
- android - 在 Spinner 中使用 LiveData
- android - 在状态栏中隐藏时间
- connection - Artifactory 中没有当前连接数据库错误
- javascript - Firebase 谷歌分析控制台奇怪的行为。事件已记录但未显示在用户快照上
- javascript - Fomantic-UI - 使用设置初始化下拉菜单
- bash - 高效可靠地检测和删除损坏的空填充文件
- excel - 无法使用 VBA 提取 Span 标题 HTML 值的内部文本
- python - Python:为什么我的原始列表在更新复制列表后受到影响
- ios - Xcode 错误有关 plist 的额外信息:ACL=
- javascript - 为什么只读输入不会在 iPad 上的 Tab 键按下时触发焦点事件?