C# 如何在调试器中将寄存器EAX的值显示为对象?
我想检查方法的返回值,而不必重新执行方法本身。我相信我唯一的选择是使用反汇编程序。我是在阅读了Stackflow问题的答案后得出这个结论的 我认为寄存器EAX中的值是我的返回值。如何在调试器中检查EAX指向的对象?这是我的反汇编返回语句C# 如何在调试器中将寄存器EAX的值显示为对象?,c#,visual-studio,C#,Visual Studio,我想检查方法的返回值,而不必重新执行方法本身。我相信我唯一的选择是使用反汇编程序。我是在阅读了Stackflow问题的答案后得出这个结论的 我认为寄存器EAX中的值是我的返回值。如何在调试器中检查EAX指向的对象?这是我的反汇编返回语句 30: return SomeString(); 000001bb mov ecx,dword ptr [ebp-3Ch] 000001be call FFF7A320 000001c3 mo
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
变量监视窗口中的ISTR
[EAX]
显示EAX寄存器 从寄存器窗口中,选择EAX寄存器值并点击Ctrl+C。调试+窗口+内存+内存1。在地址文本框中,键入0x,Ctrl+V,键入+12。+12跳过System.Object标题。如果右边的寄存器包含ASCII字符,那么读取它应该没有什么困难,忽略空值。我可以看到寄存器的值,但我想看到的是值所指向的对象。在我的例子中,我知道它是一个C字符串。@Martin:只要将地址转换为您期望的类型就行了。我是用C语言开发的,所以在调试器中使用寄存器对我来说是陌生的。你能给我举个例子吗?我有EAX=023964F4,我相信这是我的对象引用。我可以显示内存以将对象视为十六进制和ascii,但级别太低。在即时窗口中,我执行“0x023964f4 as System.String”,这给了我一个转换错误:无法通过引用转换、装箱转换将类型“int”转换为“String”,取消装箱转换、换行转换或空类型转换您也可以右键单击内存窗口并选择其中包含的数据格式,您可以选择将内存转储视为int8、int16、int32、int64、ASCII、Unicode等,但这是一个太低的级别。当我有一个更复杂的对象时会发生什么?是否仍然可以将EAX中的值强制转换为方法签名中定义的类型?在我当前的示例中,类型为string。正常的调试表达式类似于*(string*)0x017316F8
。但是,这不适用于托管对象引用。这是一个令人沮丧的问题。将反馈发布到connect.microsoft.com