0

I wanted to log the Exception details Filename , FileLineNo, Method Name (where the exception occured) This is working using the StackTrace class But some times i am getting the File Line No and Method Name as null How shall i track Exception Details all the time when an Exception occur

here is my code

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
4

3 回答 3

4

所以,你所有问题的答案可能是:“被捕获的异常将包含它可能拥有的所有细节。”

您的公共共享子 LogException 正在获取一个已经将拥有大部分信息的 Exception 对象。所以,你可以做...

LogInfo(ex.ToString())

...并获得尽可能多的细节。

在某些情况下,您可能没有文件名或行号,并且在某些情况下,您拥有的 LogInfo 语句本身会引发异常。解释了如何可靠地获取这些详细信息,尽管它带有潜在的安全风险。

我发现 Exception.ToString() 中包含的异常类型和堆栈跟踪信息通常足以查明实际错误。如果不是,则通常是代码结构的问题。

于 2012-07-26T19:17:36.513 回答
2

异常已经包含完整的堆栈跟踪。你不需要创建一个新的。

于 2012-07-26T19:16:36.860 回答
1

1) 您可以使用 Exception 对象从内部获取堆栈跟踪Exception.StackTrace。你不需要创建一个新的。

2) 如果异常是从您没有调试信息的地方抛出的(例如在框架内),您可能根本没有要获取的行号或源文件名

于 2012-07-26T19:17:17.410 回答