【问题标题】:VS 2008 c++ debug: does not show local variables for a specific function? [closed]VS 2008 c++ 调试:不显示特定函数的局部变量? [关闭]
【发布时间】:2014-01-13 17:15:09
【问题描述】:

我正在尝试调试我编写的一些 c++ 代码。
它有几个函数,都在同一个 c++ 文件中,类似于

static void b( int i ) {
     int k = i * 2;
}
static void a( int j ) {
     for( int l = 0; l < j ; l++ ) {
         b( l + j );
     }
}
int main( void ) {
    a( 4 );
    return 0;
}

我在调试模式下编译了代码,并在函数b 中放置了一个断点。 代码编译良好,调试器在断点处停止 BUT
当我尝试检查局部变量 k 的值时,我得到了

CXX0017:错误:找不到符号“k”

我可以看到 i 的值 - 输入参数。
此外,如果我在调用堆栈中单击调用函数a,我可以检查参数变量j和局部变量l...

有没有人遇到过这种奇怪的情况?

【问题讨论】:

    标签: c++ visual-studio-2008 visual-studio-debugging


    【解决方案1】:

    k 很可能在您的断点命中时未构造,并在您有机会检查它之前被销毁。

    尝试在 k 正在初始化的位置之后添加一行代码,然后在此处中断。

    static void b( int i ) {
         int k = i * 2;
         bool bk = true; // <== BREAKPOINT HERE
    }
    

    【讨论】:

    • 约翰,谢谢你的回答,但情况要复杂得多。我的代码自然比我仅为说明目的发布的示例更复杂。我有许多局部变量 all 未在调试中显示。这不是我第一次在 VS 中调试,这是我从未遇到过的。很奇怪。无论如何,谢谢。
    • @Shai:你确定你不是在发布模式下构建吗?您是否在调试模式下启用了优化?
    • 我想我明白了 - 我损坏了我的堆栈...
    • @Shai:啊,是的。那将会发生。 :)
    【解决方案2】:

    我想通了:我愚蠢到会破坏我的堆栈。我做得非常优雅,所以我仍然能够看到“调用堆栈”,但有关特定帧中局部变量的信息已损坏。更加小心和尊重地处理记忆解决了这个烦人的问题。

    感谢John您的努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多