我真的被这个难倒!
StackFrame对象(MSDN链接)具有GetFileName方法,该方法返回编译执行方法的源文件的原始路径(提供的符号已生成并包含在执行程序集中).看起来此信息用于生成完整的异常文本.
如果方法当前没有执行,我正在尝试找到获取此信息的方法.我一直在寻找反射API,并没有找到一种方法来获取这些信息.我认为它必须在某处.
有没有其他人知道可以获取代码文件名的基于反射的方法(或实际上任何其他方法)?
任何想法,评论或滥用都会感激不尽.
非常感谢!
反射只能提供来自程序集元数据的类型信息。获取地址需要 .pdb 调试文件和内存中函数的地址(由 JIT 编译器编译)。如果没有 StackFrame.GetNativeOffset() 方法或调试器接口,您将无法获取地址(假设该方法甚至已编译)。后一种方法无法在进程中工作,程序无法自行调试。
CLR 没有任何问题,因为它在处理异常时可以从堆栈帧中检索方法地址。这仍然是一种不完美的艺术,它看不到内联方法的地址。拥有这些堆栈帧是所需的第一步。