我想在 VB.net 应用程序中打印出带有行号的调试消息。
我就是这样做的,
Dim st As StackTrace
Dim sf As StackFramee
st = New StackTrace(New StackFrame(True))
sf = st.GetFrame(0)
Console.WriteLine.("Line " & sf.GetFileLineNumber())
我想将代码片段放入一个类中,每次调用 logMsg 方法以在源代码中使用行号记录我的消息时。
但我发现如果我将上面的代码片段放入一个类中,行号总是相同的,这就是我新添加的“st”行。
功能与 _ 完全相同LINEC++ 中的宏。其实我是C++程序员。
无论如何要解决这个问题吗?谢谢。
您所显示的代码完全按照预期工作。它正在打印捕获堆栈帧的行号。因为您已在不同的类中定义了它,所以它会打印包含该类的文件的行号。
The GetFrame
这里方法很重要。堆栈帧从 0 开始编号,即last堆栈帧被推送。因此,通过引用第 0 帧,您可以指示运行时打印该帧的行号last被推送的堆栈帧。当一个方法调用另一个方法时,就会创建一个新的堆栈帧。
相反,您需要在几个重要方面改变您的方法。首先,您需要获得first被推入堆栈的帧。其次,您可能想要接受一个包含有关您正在响应的异常的信息的参数。尝试重写您的调试方法,使其看起来像这样:
Public Sub PrintCurrentLine(ByVal ex As Exception)
Dim st As StackTrace = New StackTrace(ex)
Dim sf As StackFrame = st.GetFrame(st.FrameCount - 1)
Console.WriteLine("Line " & sf.GetFileLineNumber())
End Sub
另请记住,如果您在启用优化的情况下运行代码,则行号等内容可能会发生变化。您始终需要在代码中包含 PDB 文件,其中包含在此类情况下使用的调试信息。它将优化后的代码映射回您的原始源代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)