2016-07-26 23 views
3

我想用WinDbg調試正在運行的ASP.NET應用程序。我需要的是看到傳遞給方法的參數的值。所以我在此方法中設置斷點,並從!clrstack -p我得到這個:與SOS Windgb不顯示結構字段值

PARAMETERS: 
    this (0x00000004af4fdc10) = 0x000001a2b8a06e68 
    ideaForum (0x00000004af4fdc18) = 0x000001a2b8b11bc8 
    page (0x00000004af4fdc20) = 0x0000000300000001 

我很感興趣,在「頁面」參數,它是int?型(System.Nullable<System.Int32>)的所以首先我覺得MT地址爲System.Nullable`1[[System.Int32, mscorlib]]恰好是00007ffa263c7ae0。然後,我打電話!dumpvc 00007ffa263c7ae0 0000000300000001,這裏是我所得到的:

Name:  System.Nullable`1[[System.Int32, mscorlib]] 
MethodTable: 00007ffa263c7ae0 
EEClass:  00007ffa25dc6580 
Size:  24(0x18) bytes 
File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll 

Fields: 
       MT Field Offset     Type VT  Attr   Value Name 
00007ffa263da2e0 4000707  0  System.Boolean 1 instance hasValue 
00007ffa263baf60 4000708  4   System.Int32 1 instance value 

正如你所看到的,我在做什麼被標記爲Windbg with SOS, How to dump a c# struct答案,但它並不適用於字段顯示值這正是我需要的。我還需要做些什麼才能獲得價值? 謝謝。

編輯:它看起來我畢竟使用了錯誤的地址參數。參數名稱後面的那個是正確的,所以我應該使用0x00000004af4fdc20。有了這個,!dumpvc按預期工作。 Sosex更容易使用,因爲它只需要參數名稱即可完成作業

回答

4

使用!sosex.mk -a。使用!mdt作爲轉儲類型,如果你之後是字段值。 Sosex在顯示字段值時往往更友好,而sos擅長顯示更多技術細節的佈局。披露:我是sosex的作者,但它是完全免費的。

+0

謝謝史蒂夫,'''!sosex.mdt頁'''做了訣竅。我喜歡索羅克斯幫助頁順便說一句! – actionresult

+0

我很高興它對你有用。 –