4

如何处理正在 Visual Studio 2012 中调试/运行的程序,该程序显示未处理的异常并且程序停止(我的程序有错误)?有没有办法在异常发生之前将程序上的堆栈返回到上一行?

现在,每当程序中出现异常时,我都必须重新启动程序并捕获(在我的情况下,这需要很长时间)。在 Visual Studio 中抛出/显示异常之后,我想回到异常行之前的上一行,然后从那里开始。

有没有办法在 Visual Studio 中做到这一点?任何命令或按钮?

像这样:

line 1: object _hello = GetSomeObject()

line 2: if(_hello.Property == true) {
} // exception line - _hello is null

我想在不停止调试的情况下在同一实例中返回第 1 行。

4

5 回答 5

8

Once the exception is thrown you can't backtrack, you will need to first use the call stack to identify how the exception occurs, and then set a break point just before it.

The next time you debug your code, when when the debugger hits your breakpoint, you can drag the arrow pointer up to a previous line to backtrack execution to that line, then use Watch/Quick Watch, etc.

The Call Stack can be accessed in VS2012 via Debug menu -> Other Windows -> Call Stack.

Once you have looked at the call stack you will know how your program reaches the exception condition and therefore where to set your breakpoint. It depends on your situation but, just using the call stack and intellisense may solve your problem without stepping through code.

于 2013-03-03T22:57:31.763 回答
2

右键单击要返回的行并选择“设置下一条语句”(Ctrl + Shift + F10)。这通常会将您带回该位置,而无需重新开始。我听说你只能这样做一次,但我并不经常使用它,所以不知道为什么。

于 2013-03-03T23:11:00.287 回答
2

有关使用调用堆栈的更多信息,请参见此处

调用堆栈顶部的行是您的异常发生的地方。

如果单击顶部的第二行,您可以查看在异常行之前发生的函数或过程调用。

在此处输入图像描述

于 2013-03-03T23:06:14.257 回答
0

我不知道您使用的是 VS 2012 的哪个 SKU,但如果它具有IntelliTrace功能,您绝对应该检查一下。

于 2013-03-03T23:17:33.413 回答
0

转到菜单中的调试-> 异常。对于您要查找的任何异常,单击已抛出复选框。程序运行时

于 2016-08-01T15:51:00.573 回答