【问题标题】:Visual Studio - go back from exceptionVisual Studio - 从异常中返回
【发布时间】:2013-03-03 22:54:21
【问题描述】:

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

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

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

像这样:

line 1: object _hello = GetSomeObject()

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

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

【问题讨论】:

  • 您的问题提到了 2012 年,但您将其标记为 2010 年。那么它是哪一个?无论如何,一旦异常已经被抛出,你(通常)不能在程序中回溯到那个点,你必须重新运行它回到那个点。但是,如果您有 VS Ultimate,则可以使用 IntelliTrace 来帮助您,甚至可以回溯。

标签: c# visual-studio-2010 visual-studio exception


【解决方案1】:

一旦抛出异常就无法回溯,您需要先使用调用堆栈来确定异常是如何发生的,然后在它之前设置一个断点。

下次调试代码时,当调试器遇到断点时,可以将箭头指针向上拖动到上一行以回溯执行到该行,然后使用 Watch/Quick Watch 等。

调用栈可以在VS2012中通过Debug menu -> Other Windows -> Call Stack来访问。

一旦您查看了调用堆栈,您就会知道您的程序是如何到达异常条件的,从而知道在哪里设置断点。这取决于您的情况,但仅使用调用堆栈和智能感知可能无需单步执行代码即可解决您的问题。

【讨论】:

    【解决方案2】:

    有关使用调用堆栈的更多信息,请参阅here

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我不知道您使用的是 VS 2012 的哪个 SKU,但如果它具有 IntelliTrace,您一定要检查一下。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-02-08
            • 2015-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-01
            • 1970-01-01
            相关资源
            最近更新 更多