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

C++ assert doesn't produce stack frame when I include the iostream header

本文关键字:堆栈 断言 包含 iostream C++      更新时间:2023-10-16

我使用的是Visual Studio 2013 Express for Desktop。程序如下:

#include<cassert>
#include<iostream>
int main()
{
    int a = 1;
    assert(1 == 2);
}

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

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

有什么问题吗?

您应该指示Visual Studio 2013从MS Symbol Server加载符号。然后得到这样的stacktrace:

> msvcr120d.dll !_NMSG_WRITE(int rternum) Line 226 C
abort()第62行C
msvcr120d.dll !_wassert(const wchar_t * expr, const wchar_t * filename, unsigned int lineno) Line 156 C
main()第7行c++
[外部代码]

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

顺便说一句,你也应该考虑升级到Visual Studio 2013 Update 2。