首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出行号

输出行号
EN

Stack Overflow用户
提问于 2009-05-23 21:04:48
回答 3查看 1.1K关注 0票数 1

在VB.NET中,有没有办法输出源代码中的当前行号?例如:

代码语言:javascript
复制
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变量?

EN

回答 3

Stack Overflow用户

发布于 2009-05-23 21:10:01

这应该可以完成这项工作:

代码语言:javascript
复制
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。)

票数 5
EN

Stack Overflow用户

发布于 2009-05-23 21:05:42

行号已经在异常的堆栈跟踪中了。我认为它甚至可以在一个简单的ex.ToString中显示出来。

票数 0
EN

Stack Overflow用户

发布于 2012-07-10 00:07:14

我只是想纠正Noldorin的反应,因为他使用了错误的Stacktrace构造函数:

代码语言:javascript
复制
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是使用调用方的当前线程创建的,不包含文件名、行号或列信息。

生成的堆栈跟踪描述了异常发生时的堆栈。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/902492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档