在 Visual Studio 调试器中查看反汇编代码(C#、C++、Visual Basic、F#)
“反汇编”窗口显示与编译器所创建的指令对应的汇编代码。 如果正在调试托管代码,则这些汇编指令对应于由实时 (JIT) 编译器创建的本机代码,而不是由 Visual Studio 编译器创建的 Microsoft 中间语言 (MSIL)。
只有启用了地址级调试后,此功能才可用。 它不适用于脚本或 SQL 调试。
除汇编指令外,“反汇编”窗口还可显示下列可选信息:
每条指令所在的内存地址 对于本机应用程序,它是实际内存地址。 对于 Visual Basic 或 C#,它是距离函数开头的偏移量。
程序集代码派生于的源代码。
代码字节,即实际计算机或 MSIL 指令的字节表示形式。
内存地址的符号名。
对应于源代码的行号。
汇编语言指令由助记符(指令名称的缩写)和代表变量、寄存器以及常量的符号组成。 每一条机器语言指令由一个汇编语言助记符表示,(可选)后跟一个或多个符号。
汇编代码在很大程度上依赖于处理器寄存器;对于托管代码,则依赖于公共语言运行时寄存器。 可以将“反汇编”窗口与“寄存器”窗口一起使用,以便检查寄存器内容。
若要以原始数字形式而不是汇编语言查看机器代码指令,请使用“内存”窗口,或从“反汇编”窗口的快捷菜单中选择“代码字节”。
使用“反汇编”窗口
若要启用“反汇编”窗口,请在“工具”>“选项”>“调试”下,选择“启用地址级调试” 。
若要在调试期间打开“反汇编”窗口,请选择“窗口”>“反汇编”或按 Alt+8 。
注意
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于你现用的设置或版本。 若要更改设置,请在 “工具” 菜单上选择 “导入和导出设置” 。 有关详细信息,请参阅重置所有设置。
若要打开或关闭可选信息,请在“反汇编”窗口中单击右键,然后在快捷菜单中设置或清除所需的选项。
左边距中的黄色箭头表示当前执行点。 对于本机代码,该执行点对应于 CPU 的程序计数器。 该位置显示程序中将要执行的下一条指令。
在内存中向上或向下翻页
在“内存”窗口或“反汇编”窗口中查看内存内容时,可以使用垂直滚动条在内存空间中上下移动。
若要向下翻页(移动到较高的内存地址),请单击滚动框下方的垂直滚动条。
若要向上翻页(移动到较低的内存地址),请单击滚动块上方的垂直滚动条。
您还将注意到垂直滚动条以非标准方式工作。 如今的计算机地址空间非常大,抓取滚动条滚动块并将其移动到任意位置,就容易找不到地址。 为此,滚动块就像“装了弹簧”,总是保持在滚动条的中心。 在本机代码应用程序中,可以向上或向下翻页,但不能随便滚动。
在托管应用程序中,反汇编限于一个函数,因而您可以正常滚动。
可以注意到,较高的地址出现在窗口的底部。 若要查看较高的地址,必须向下移动而不是向上移动。
向上或向下移动一个指令
- 单击垂直滚动条顶部或底部的箭头。