gdb无法监视for循环中声明的变量

时间:2010-08-16 12:03:35

标签: c++ gcc gdb

我正在使用 gcc 4.1.2 20080704(Red Hat 4.1.2-48) GNU gdb(GDB)红帽企业Linux(7.0.1-23.el5_5.1)

我无法观察for循环中声明的变量。我尝试在一个较小的示例上重新创建此行为,但它工作正常。似乎这个问题只出现在复杂的类成员函数中。请建议。

编辑:优化已关闭

3 个答案:

答案 0 :(得分:3)

听起来像是通过优化编译的。尝试使用-O0 -g重新编译。

答案 1 :(得分:0)

我同意你可能需要关闭优化。 why 是因为编译器可能在优化步骤中消除了局部变量,并将它们的值直接存储在寄存器中。

如果您不希望使用-O0重新构建所有内容,也可以尝试在测试时将这些变量声明为 volatile

答案 2 :(得分:0)

我无法完全解决它,但这项工作可能会对你有所帮助。

让我们说想要在

中访问循环变量
for(int i=0;i<x;i++){...}

您可以执行以下操作

print &i
$1 = (int *) 0x7fffffffdfa8
watch *0x7fffffffdfa8

这个有一个明显的缺点,就是必须等待,因为它可能会多次重新分配垃圾值,每次发生时都会收到通知