我正在使用 gcc 4.1.2 20080704(Red Hat 4.1.2-48) GNU gdb(GDB)红帽企业Linux(7.0.1-23.el5_5.1)
我无法观察for循环中声明的变量。我尝试在一个较小的示例上重新创建此行为,但它工作正常。似乎这个问题只出现在复杂的类成员函数中。请建议。
编辑:优化已关闭
答案 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
这个有一个明显的缺点,就是必须等待,因为它可能会多次重新分配垃圾值,每次发生时都会收到通知