正在读取堆栈跟踪

本文关键字:跟踪 堆栈 读取 | 更新日期: 2023-09-27 18:24:28

我正试图找出异常的原因,有时堆栈跟踪中的最后一行就是异常发生的地方。其他时候则不然,您需要在stacktrace中提到的其他行上设置断点。

例如,如果异常发生在倒数第二行(从顶部算起的第二行),为什么堆栈跟踪不停止在这一行?相反,它打印了一条额外的线,这是骗人的。在运行时,异常显示在此文件中,该文件作为堆栈跟踪的最后一行提到。但是,如果在堆栈跟踪中提到的倒数第二行设置断点,那么问题就很明显了

我可以想到3种情况,在这些情况下,您可能会看到与异常发生时调试器所在位置略有不同的堆栈跟踪:

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

正在读取堆栈跟踪