Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在调试器中将寄存器EAX的值显示为对象?_C#_Visual Studio - Fatal编程技术网

C# 如何在调试器中将寄存器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

我想检查方法的返回值,而不必重新执行方法本身。我相信我唯一的选择是使用反汇编程序。我是在阅读了Stackflow问题的答案后得出这个结论的

我认为寄存器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 

变量监视窗口中的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