【问题标题】:Can I know the last statement executed during debugging in Visual Studio 2015?我可以知道在 Visual Studio 2015 中调试期间执行的最后一条语句吗?
【发布时间】:2017-02-14 14:48:41
【问题描述】:

我正在 Visual Studio 2015 中调试 C# 程序。

执行从 try 语句中的代码内部的某处跳转到 catch 语句。

如何找出最后执行的语句,即引发异常的语句?

谢谢。

【问题讨论】:

  • 异常的堆栈跟踪显示了它被抛出的位置。
  • 使用调试器,单步执行 (F5) 并进入 (F11) 每个方法,直到找到它引发错误的位置。

标签: c# visual-studio exception


【解决方案1】:

看看你的堆栈跟踪:

static void Main(string[] args)
{
    try
    {
        Console.WriteLine("starting");
        throw new Exception("Testing");
        Console.WriteLine("unreachable");
        Console.ReadKey();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
        throw;
    }
}

输出:

开始

System.Exception:测试 在 C:\Users\dfield\Documents\Visual Studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 161

中的 ConsoleApplication1.Program.Main(String[] args)

第 161 行是throw new Exception("Testing");

这个方法可能有一些例外(哈哈)——比如当 StackOverflowExceptionOutOfMemoryException 发生时(我认为),或者如果自定义异常删除或以其他方式更改 @ 上的 StackTrace 对象987654326@(我已经看到这样做是为了混淆返回给不应该看到它的客户端的堆栈跟踪)。您可能还需要查看InnerException 的堆栈跟踪。

【讨论】:

  • 谢谢。我没有显示堆栈跟踪的窗口。我怎样才能打开这样一个窗口?
  • 如果您在catch 块的入口处设置断点,您可以检查ex 变量并查看其堆栈跟踪。
  • 或者它也会显示在 Locals 选项卡中,您可以在那里检查它,或者使用 System.Diagnostics.Debug.WriteLine(ex.ToString()) 之类的东西在 Output 窗口
  • 谢谢。我看到了。我可以点击某个地方跳转到最后一条语句吗?
  • 我不知道。
【解决方案2】:

确保您已在异常设置中启用Common Language Runtime Exceptions。选中后,调试器应在抛出错误时中断,在未处理时取消选中。

【讨论】:

    【解决方案3】:

    您可以在 try 子句中的每个语句处设置断点,也可以直接使用 Visual Studio 提供的功能。在底部的某处(您的控制台通常所在的位置)有一个名为“调用堆栈”的窗口。这显示了最后一条语句的执行顺序。

    【讨论】:

    • 当您在 catch 块中时,堆栈跟踪窗口不再显示堆栈,因为它在引发异常的语句处。
    【解决方案4】:

    当您捕获异常时,查看 StackTrace 值,它将为您提供有关异常发生的位置以及异常原因的所有信息:

    示例:尝试使用 Int32.Parse("Hello"); 将字符串转换为 int;将抛出异常和堆栈跟踪,如下所示:

    在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 在 System.Number.ParseInt32(String s,NumberStyles 样式,NumberFormatInfo 信息) 在 System.Int32.Parse(String s) 在 program.cs:line 32 中的 Test123() 处

    【讨论】:

      【解决方案5】:

      打开diagnostic tools 窗口并在Events 列表中搜索红色项目。

      双击它直接转到引发异常的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-15
        • 1970-01-01
        • 2020-11-14
        • 1970-01-01
        • 2022-01-17
        • 2014-02-20
        相关资源
        最近更新 更多