C++断言在我包含 iostream 标头时不会产生堆栈帧
C++ assert doesn't produce stack frame when I include the iostream header
我使用的是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。
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- C++ 使用增强正则表达式库时断言崩溃
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 使用链接列表实现堆栈,调试断言失败
- C++ -> 断言失败堆栈
- 堆栈列表调试断言失败c++
- C++断言在我包含 iostream 标头时不会产生堆栈帧
- 如何在Visual Studio 2012中查看断言失败的C++堆栈跟踪