读取堆栈跟踪

时间:2012-02-13 17:09:23

标签: c# .net debugging

我正在尝试追踪异常的原因,有时堆栈跟踪中的最后一行是它发生的位置。其他时候它不是,你需要在stacktrace中提到的其他行上设置断点。

例如,如果在第2行到最后一行(从顶部开始)发生异常,为什么堆栈跟踪不会在此行停止?它改为打印另一条线,这是欺骗。在运行时,异常显示在此文件中,作为堆栈跟踪中的最后一行。但是,如果在堆栈跟踪中提到的第2行到最后一行设置断点,则可以清楚问题是什么。

1 个答案:

答案 0 :(得分:1)

我可以想到3种情况,您可能会看到稍有不同的堆栈跟踪,然后发生异常时调试器会转到的地方:

  1. 在发布模式下构建的程序集最终可能会被优化,而您正在调试的代码可能并不完全代表正在运行的IL。
  2. 如果你有一个尝试{do();} catch(例外e){throw e;它会改变你的堆栈跟踪。
  3. 如果您启用了“只是我的代码”并且从您拥有源代码的外部代码中抛出异常,则可能会得到与调试器要停止的位置略有不同的堆栈跟踪。