我会尝试解释我需要的东西。
假设我有一个这样的课程:
Public Class Example1
Public Sub ToBeCalled()
System.Console.WriteLine(
"The Method or Class or file and its line which called me is: ",
?????)
End Sub
End Class
然后我有这样的第二堂课:
Public Class Second
Public Sub SomeProcedure()
Dim obj As Example1 = New Example1
obj.ToBeCalled()
End Sub
End Class
Module1
Dim obj2 As Second = New Second()
obj2.SomeProcedure()
End Module1
我想在屏幕上取代“????”是:
1)调用我的方法或类或文件及其行是:第二个
2)调用我的方法或类或文件及其行是:SomeProcerure
3)......是:Second.vb
4)......是:第54行
5).......是:col 33
有人可以帮帮我吗?
答案 0 :(得分:1)
您始终可以使用StackTrace class。这将允许您遍历堆栈以查找有关导致调用方法的方法的信息。
在您的情况下,您将需要使用StackFrame class,因为您只需要一个特定帧(您可以使用StackTrace类,但它会执行整个跟踪,并且在这种情况下,你只需要一个框架)。使用StackTrace实例,您可以调用GetMethod method来获取代表正在进行调用的方法的MethodBase实例。
这是一个例子,它在C#中,但很容易翻译成VB.NET:
// Skip the current stack frame, get the caller.
StackFrame stackFrame = new StackFrame(1);
// Print out the method name.
Console.WriteLine(stackFrame.GetMethod().Name);
请注意,如果您想要线号等附加信息,则必须使用PDB文件提供调试版本。
答案 1 :(得分:0)
您正在寻找StackTrace
课程。
请注意,您只能使用PDB文件在调试版本中获取行号。
另请注意,您应在方法之前添加<MethodImpl(MethodImplOptions.NoInlining)> _
。
答案 2 :(得分:0)
为了获得调用者(也是列号和行号),您应该使用System.Diagnostics.StackTrace类。
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame = stackTrace.GetFrame(1);
MethodBase methodBase = stackFrame.GetMethod();
答案 3 :(得分:0)
StackTrace课程可能会为您提供所需的信息。
目前正在考虑使用更简单的方法来访问此信息,因为VB 11:Lucian's VBlog: Power6: CALLER_MEMBER。