我想记录Exception详细信息 Filename,FileLineNo,方法名称(发生异常的地方) 这是使用StackTrace类 但有时我得到文件行号和方法名称为null 如何在发生异常时跟踪异常详细信息
这是我的代码
Public Shared Sub LogException(ByVal ex As Exception)
Dim trace As Diagnostics.StackTrace = New Diagnostics.StackTrace(ex, True)
LogInfo(String.Format("Error Message :{0} => Error In :{1} => Line Number :{2} => Error Method:{3}",
ex.Message, trace.GetFrame(0).GetFileName(),
trace.GetFrame(0).GetFileLineNumber(),
trace.GetFrame(0).GetMethod().Name))
End Sub
答案 0 :(得分:4)
因此,您可能会立即回答所有问题:“捕获的异常将包含它可能具有的所有详细信息。”
您的公共共享子LogException正在获取一个已经包含大部分信息的Exception对象。所以,你可以做......
LogInfo(ex.ToString())
...并尽可能详细地获取详细信息。
在某些情况下,您可能没有文件名或行号,在某些情况下,您拥有的LogInfo语句本身也会引发异常。 This解释了如何可靠地获取这些细节,尽管它带来了潜在的安全风险。
我发现Exception.ToString()中包含的异常类型和堆栈跟踪信息通常足以查明实际错误。如果不是,它通常是代码结构的问题。
答案 1 :(得分:2)
异常已包含完整堆栈跟踪。您无需创建新的。
答案 2 :(得分:1)
1)您可以使用Exception.StackTrace
从Exception对象中获取堆栈跟踪。您无需创建新的。
2)如果从某个地方抛出异常,你没有调试信息(例如在框架内),你可能根本就没有行号或源文件来获取。