使用反射時,可以使用System.Diagnostics.StackTrace獲取調用堆棧(除了它可以是由JIT優化造成的粗略近似)並檢查包含的StackFrame對象。如何獲取堆棧幀的執行對象?
我怎樣才能得到一個對象(this-pointer)的一個方法在棧框架正在執行的引用?我知道我可以通過調用堆棧框架對象上的GetMethod()來獲得MethodBase,但我正在尋找的東西是沿着GetObject()的行(如果方法是靜態的,它自然會返回null )。似乎堆棧框架對象只能查詢靜態確定的信息,如方法信息,原始文件等。
VS調試器知道(雖然它可能使用另一種獲取調用堆棧跟蹤的方法),就像一個可以雙擊調用堆棧窗口中的任何堆棧幀並查看本地和類字段的值。
編輯: 澄清:我想對象實例上被調用的方法。 I.e .:如果方法Foo()在調用堆棧某處的對象實例A上調用,並且它會級聯到我執行堆棧跟蹤的方法,我想從執行堆棧跟蹤的位置獲得對A的引用。 (不是方法庫的聲明類型)
我認爲他是指實例,而不是類型。 – 2009-05-20 18:08:03
是的,'對象'意味着一個類型的實例;) – 2009-05-21 10:24:37