【发布时间】:2009-05-20 17:50:17
【问题描述】:
使用反射时,可以使用 System.Diagnostics.StackTrace 获取调用堆栈(除此之外,由于 JIT 优化,它可能是一个粗略的近似值)并检查包含的 StackFrame 对象。
如何获取对堆栈帧中的方法正在其上执行的对象(this 指针)的引用?
我知道我可以通过在堆栈帧对象上调用 GetMethod() 来获取 MethodBase,但我正在寻找的是类似于 GetObject() 的东西(如果方法是静态的,它自然会返回 null) .似乎只能查询堆栈帧对象以获取静态确定的信息,例如方法信息、原始文件等。
VS 调试器知道(尽管它可能使用另一种获取调用堆栈跟踪的方法),因为可以双击调用堆栈窗口中的任何堆栈帧并查看本地和类字段的值。
编辑: 澄清一下:我想要调用该方法的 object instance。即:如果方法 Foo() 在调用堆栈上的某处对象实例 A 上调用,并且它级联到我执行堆栈跟踪的方法,我想从执行堆栈跟踪的位置获取对 A 的引用。 (不是方法基的声明类型)
【问题讨论】:
标签: c# reflection stack-trace stack-frame