2010-08-03 37 views
2

我想檢查一個方法的返回值,而不必重新執行方法本身。我相信我唯一的選擇是使用反彙編程序。在閱讀Stackflow的問題Getting a Method's Return Value in the VS Debugger後,我得出了這個結論。如何在調試器中將寄存器EAX的值顯示爲對象?

我認爲寄存器EAX中的值是我的返回值。如何在調試器中檢查EAX指向的對象?這是我的反彙編語句。

30:    return SomeString(); 
000001bb mov   ecx,dword ptr [ebp-3Ch] 
000001be call  FFF7A320 
000001c3 mov   dword ptr [ebp-78h],eax 
000001c6 mov   eax,dword ptr [ebp-78h] 
000001c9 mov   dword ptr [ebp-4Ch],eax 
000001cc nop 
000001cd jmp   000001D8 
000001cf mov   dword ptr [ebp-1Ch],0 
000001d6 jmp   000001BA 
    31:   } 
000001d8 mov   eax,dword ptr [ebp-4Ch] 
000001db lea   esp,[ebp-0Ch] 
000001de pop   ebx 
000001df pop   esi 
000001e0 pop   edi 
000001e1 pop   ebp 
000001e2 ret 

回答

3

ISTR [EAX]在變量觀察窗口顯示EAX寄存器。

+0

我可以看到寄存器的值,但我想看到的是值指向的對象。在我的情況下,我知道這是一個C#字符串。 – Don 2010-08-03 15:56:05

+0

@Martin:只需將地址轉換爲您期望的類型即可。 – sbi 2010-08-03 15:58:01

+0

我用C#開發,所以在調試器中使用寄存器對我來說是陌生的。你能舉個例子嗎?我有EAX = 023964F4,我相信這是我的對象引用。 – Don 2010-08-03 16:13:47

3

從寄存器窗口中,選擇EAX寄存器值並按Ctrl + C。調試+ Windows +內存+內存1.在地址文本框中,鍵入0x,Ctrl + V,鍵入+12。 +12跳過System.Object頭。如果它包含ASCII字符,那麼在右側閱讀它應該沒什麼問題,請忽略空值。

+0

其實這很好。 – 2010-08-03 16:50:12

+0

您也可以右鍵單擊內存窗口並選擇其中包含的數據的格式,您可以選擇查看內存轉儲爲int8,int16,int32,int64,ASCII,Unicode等 – 2010-08-03 17:10:56

+0

是的,可以工作,但這個水平太低了。當我有一個更復雜的對象時會發生什麼?無論如何要將EAX中的值轉換爲方法簽名中定義的類型?在我目前的例子中,類型是字符串。 – Don 2010-08-03 17:11:03

相關問題