Tag: 堆栈跟踪

如何在StackTrace中获取.NET中抛出的exception中的行号以显示

MSDN说这是关于Exception类的StackTrace属性: StackTrace属性包含堆栈跟踪,您可以使用它来确定错误发生在代码中的何处。 StackTrace列出了exception之前的所有被调用方法以及进行调用的源中的行号。 所以我知道这些信息是可用的。 如何获得实际显示在堆栈跟踪中的行号? 我的代码在一个非常困难和复杂的代码片段中抛出一个exception,它通过TONS的对象,所以我不想经过几十年的时间来查看exception发生的位置。 exception的堆栈跟踪仅显示方法签名而不显示行号。

什么可以导致重置一个callstack(我正在使用“throw”,而不是“throw ex”)

我一直认为“throw”和“throw ex”之间的区别在于,单独抛出并没有重置exception的堆栈跟踪。 不幸的是,这不是我正在经历的行为; 这是一个简单的样本再现我的问题: using System; using System.Text; namespace testthrow2 { class Program { static void Main(string[] args) { try { try { throw new Exception(“line 14”); } catch (Exception) { throw; // line 18 } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } } 我希望这段代码能够从第14行开始打印一个callstack; 然而,callstack从第18行开始。当然,它在样本中没什么大不了的,但在我的实际应用程序中,丢失初始错误信息非常痛苦。 我错过了一些明显的东西吗 有没有其他方法来实现我想要的(即重新抛出exception而不丢失堆栈信息?) 我正在使用.net 3.5