当我包含iostream头时,C ++断言不会产生堆栈帧

时间:2014-07-15 06:56:59

标签: c++ visual-studio-2013

我正在使用Visual Studio 2013 Express for Desktop。这是程序:

#include<cassert>
#include<iostream>

int main()
{
    int a = 1;
    assert(1 == 2);
}

当我在调试模式下运行时,断言失败,然后单击“重试”。然后触发断点,但我在变量列表中看不到a,并且调用堆栈中没有函数main()

但是,如果我删除#include<iostream>,一切都会好的。我将能够在变量列表中看到a,并且main()将显示在调用堆栈中。

有什么问题?

1 个答案:

答案 0 :(得分:2)

你应该instruct Visual Studio 2013 to load the symbols from the MS Symbol Server。然后你得到这个堆栈跟踪:

  

&gt; msvcr120d.dll!_NMSG_WRITE(int rterrnum)第226号线C
      msvcr120d.dll!abort()第62行C       msvcr120d.dll!_wassert(const wchar_t * expr,const wchar_t * filename,unsigned int lineno)Line 156 C
      ConsoleApplication1.exe!main()第7行C ++
      [外部代码]

当选择_NMSG_WRITE时,我看不到变量a,但是当选择main()时,我可以在autos和locals窗格中看到变量a。

顺便说一句,您还应该考虑更新到Visual Studio 2013 Update 2。