2008-10-03 102 views
5

是否有一種方法可以使用.NET反射來捕獲所有參數/局部變量的值?使用反射捕獲方法狀態

+0

您能否提供您正在嘗試存檔的用例? – Alex 2009-11-23 00:51:21

回答

3

你可以使用CLR debugging API雖然它不會是在這個信息得到一個簡單的幾行提取它。

+0

託管調試器示例:http://www.microsoft.com/downloads/details.aspx?familyid=38449a42-6b7a-4e28-80ce-c55645ab1310&displaylang=en – 2009-11-23 00:46:48

1

反射會告訴你方法具有的參數的類型,但它不會幫助在任何特定的調用中發現它們的值。反射並沒有告訴你任何有關局部變量的信息。

您需要調試器用來訪問這類信息的那種API。

0

我不認爲這是可能的,你可以通過查看StackTrace來獲取方法及其參數。

System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace(true); 
for (Int32 frameCount = 0; frameCount < sTrace.FrameCount; frameCount++){ 
    System.Diagnostics.StackFrame sFrame = sTrace.GetFrame(frameCount); 
    System.Reflection.MethodBase thisMethod = sFrame.GetMethod(); 
    if (thisMethod == currentMethod){ 
      if (frameCount + 1 <= sTrace.FrameCount){ 
       System.Diagnostics.StackFrame prevFrame = sTrace.GetFrame(frameCount + 1); 
       System.Reflection.MethodBase prevMethod = prevFrame.GetMethod(); 
      } 
    } 
} 
0

secondlife鄉親暫停腳本和服務器之間移動它們的鏈接。這意味着他們必須捕獲正在運行的腳本的狀態,包括調用堆棧上變量的值。

他們的腳本語言運行在單聲道,.NET運行時的開源實現。我懷疑他們的解決方案適用於常規的.NET運行時,但video of the presentation on how they did it(跳到下半部分)可能仍然很有趣。