gdb - 观察全局变量
gdb - watching global variable
我想在主函数开始之前观察一个全局变量。一种可能的解决方案是创建一个初始化全局变量并在函数上设置断点的函数:
int Init()
{
return 0;
}
int globalX = Init();
//gdb: break Init
//gdb: run
//gdb: awatch globalX
是否可以在不定义函数断点的情况下监视全局变量(在 main 函数开始之前)? watch globalX
无效。
Is it possible to watch a global variable (before start of the main function) without defining a function breakpoint ?
是的。但是,GDB只有在程序启动后变量的值发生变化时才会停止,而对于一个用常量值初始化的变量,它被设置为该值的时间是之前程序开始。
更准确地说:
int foo;
int bar = 42;
int baz = func();
变量 foo
分配在 .bss
部分,并且在进程中的第一条指令执行之前具有值 0
。
同样,变量bar
被分配在.data
段,并且在第一条指令之前的值为42
(.data
段中的相应位置有这个磁盘上的值,并且它只是在进程启动之前 mmap
ed 到进程中)。
变量 baz
分配在 .data
部分,并且 动态 初始化 - 这是唯一一个在之后实际更改其值的变量该过程开始。您可以 watch
该变量并观察初始化发生的位置,而无需在 func()
.
上设置断点
我想在主函数开始之前观察一个全局变量。一种可能的解决方案是创建一个初始化全局变量并在函数上设置断点的函数:
int Init()
{
return 0;
}
int globalX = Init();
//gdb: break Init
//gdb: run
//gdb: awatch globalX
是否可以在不定义函数断点的情况下监视全局变量(在 main 函数开始之前)? watch globalX
无效。
Is it possible to watch a global variable (before start of the main function) without defining a function breakpoint ?
是的。但是,GDB只有在程序启动后变量的值发生变化时才会停止,而对于一个用常量值初始化的变量,它被设置为该值的时间是之前程序开始。
更准确地说:
int foo;
int bar = 42;
int baz = func();
变量 foo
分配在 .bss
部分,并且在进程中的第一条指令执行之前具有值 0
。
同样,变量bar
被分配在.data
段,并且在第一条指令之前的值为42
(.data
段中的相应位置有这个磁盘上的值,并且它只是在进程启动之前 mmap
ed 到进程中)。
变量 baz
分配在 .data
部分,并且 动态 初始化 - 这是唯一一个在之后实际更改其值的变量该过程开始。您可以 watch
该变量并观察初始化发生的位置,而无需在 func()
.