假设您在C#中有一个MethodInfo或任何其他的MemberInfo子类。是否可以检索声明它的文件的名称以及声明开始处的行号?此信息必须存在于调试模式元数据中的某处,因为创建StackTrace实例将为您提供该信息。我应该查看System.Diagnostics而不是System.Reflection吗?
答案 0 :(得分:4)
有关行号的信息通常来自符号文件(或“程序数据库”.pdb)。像FxCop这样的工具使用符号文件将IL链接回源代码。我为您搜索了以下API:http://msdn.microsoft.com/en-us/library/system.diagnostics.symbolstore.aspx
答案 1 :(得分:1)
您应该使用System.Diagnostics Symbol类从.pdb文件中提取信息。这是一个很好的blog就可以了
这样的事可能有用:
using System;
using System.Diagnostics;
class Foo
{
static void Main()
{
SmallFunc();
}
static void SmallFunc()
{
PrintStack();
}
static void PrintStack()
{
StackTrace st = new StackTrace(true); // true means get line numbers.
foreach(StackFrame f in st.GetFrames()) {
Console.Write(f);
}
}
}