【发布时间】:2013-09-27 04:23:12
【问题描述】:
我最近开始从 C# 背景开始学习 C++。我的问题在于处理异常的方式。
如果我在某处有一个nullptr,导致从一个禁止的位置读取,那么我会在 VS 中得到一个漂亮的调用堆栈,如下所示:
但是,如果我抛出自己的异常,或者断言失败,那么我就不会得到任何关于哪里出错的线索。 VS 只是显示一个错误窗口:
答:这对我来说有点不舒服,因为在 C# 中我会在这两种情况下得到堆栈跟踪。有没有办法打印堆栈跟踪?或者有没有VS的插件可以实现这个功能?
B: 为什么 AccessViolationException 与我们自己抛出的异常不同?为什么我们没有断言失败的堆栈跟踪?
C:创建自己的断言函数会有多糟糕,当断言失败时会导致 AccessViolationException?
EDIT1:是的,我应该更仔细地阅读该消息框,而不是立即单击中止。我的错。
【问题讨论】:
-
在断言消息框上按“重试”,您应该会看到一个漂亮的对话框,其中提供了调试代码的选项,包括查看调用堆栈。对于异常:您也可以这样做:您可以在抛出异常时打开中断,它位于设置中的某个位置。
-
是的,谢谢戴夫,这应该足够了。但是仍然有人可以回答我在 B 点提出的问题吗?
标签: c++ visual-studio exception callstack