gdb:当前上下文中没有符号"i"

Ben*_*209 22 c debugging gdb

在gdb中调试C程序时,我在for循环中有一个断点.我无法打印"i"的值(我得到:在当前上下文中没有符号"i").我可以打印所有其他变量的值.这是正常的吗?

这是循环:

for (i=0; i < datasize; i++){  
    if ( feature_mask[i] > 0 ){  
        k = feature_mask[i] - 1;  
        if (neighbors[k][nmax-1] != 0){
            neighbors[k][nmax-1] = bvalue;  
            feature_mask[i] = -feature_mask[i];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

dre*_*lax 23

我最近遇到过这个问题.我编译了GCC 5.1,然后用它来编译C++ 11代码库.而且,虽然我可以单步在gdb程序的代码,我无法打印任何变量的值,我一直得到"在目前情况下'’无符号" XYZ错误,每一个变量.

我使用的是gdb 7.4,但当时的最新版本是7.9.我下载了最新版本的gdb并对其进行了编译(使用GCC 5.1),当使用gdb 7.9时,我能够再次成功检查变量值.

我猜GCC 5.1的调试信息与gdb 7.4不兼容.

  • 确实,请参见[此答案](http://stackoverflow.com/a/15051109/673852)。 (2认同)

a'r*_*a'r 22

它可能已经在您编译的代码中进行了优化,因为您只feature_mask[i]在循环中使用它.

在调用编译器时是否指定了优化级别?如果您使用的是gcc,则只需省略任何-O选项,然后重试.


unw*_*ind 6

确保程序在编译时没有进行优化,并且启用了调试信息。循环计数器很可能以寄存器结尾。