在VB.NET中,有没有办法输出源代码中的当前行号?例如:
Try
' The following line will purposly cause an error
Dim BigNum As Int64
Dim LittleNum As Int16 = CShort(BigNum)
Catch ex As Exception
Dim LineNumber As Integer = <linenumber> ' How do I do this?
MessageBox.Show("Error in source code. Line: " + LineNumber)
End Try有没有办法用导致错误的源代码中的实际行号填充上面示例中的LineNumber变量?
发布于 2009-05-23 21:10:01
这应该可以完成这项工作:
Dim stackTrace = New System.Diagnostics.StackTrace(ex)
Dim stackFrame = stackTrace.GetFrame(stackTrace.FrameCount - 1)
Dim lineNumber = stackFrame.GetFileLineNumber()请注意,GetFrame(stackTrace.FrameCount - 1))获取推送到堆栈上的第一个帧。在本例中,这是包含当前try-catch块的帧,这正是您想要的。有关详细信息,请参阅MSDN docs。)
发布于 2009-05-23 21:05:42
行号已经在异常的堆栈跟踪中了。我认为它甚至可以在一个简单的ex.ToString中显示出来。
发布于 2012-07-10 00:07:14
我只是想纠正Noldorin的反应,因为他使用了错误的Stacktrace构造函数:
Dim stackTrace = New System.Diagnostics.StackTrace(ex, True)
Dim stackFrame = stackTrace.GetFrame(stackTrace.FrameCount - 1)
Dim lineNumber = stackFrame.GetFileLineNumber()将True指定为构造函数的第二个参数将告诉它在创建时捕获堆栈源信息。如果没有它,stackFrame.GetFileLineNumber()将始终返回0。
有关正确构造函数的解释,请参阅http://msdn.microsoft.com/en-us/library/dsay49kt.aspx,并查看http://msdn.microsoft.com/en-us/library/25h0kw08.aspx以显示Noldorin建议的构造函数。请注意备注部分,其中说明:
StackTrace是使用调用方的当前线程创建的,不包含文件名、行号或列信息。
生成的堆栈跟踪描述了异常发生时的堆栈。
https://stackoverflow.com/questions/902492
复制相似问题