在 Visual Studio 调试器中查看反汇编代码(C#、C++、Visual Basic、F#)

“反汇编”窗口显示与编译器所创建的指令对应的汇编代码。 如果正在调试托管代码,则这些汇编指令对应于由实时 (JIT) 编译器创建的本机代码,而不是由 Visual Studio 编译器创建的 Microsoft 中间语言 (MSIL)。

注意

若要充分利用“反汇编”窗口,请了解或学习汇编语言编程的基础知识。 Intel 指令集的参考资料位于体系结构手册的第二卷。 此资料通常也适用于 AMD 指令集。

只有启用了地址级调试后,此功能才可用。 它不适用于脚本或 SQL 调试。

除汇编指令外,“反汇编”窗口还可显示下列可选信息:

  • 每条指令所在的内存地址 对于本机应用程序,它是实际内存地址。 对于 Visual Basic 或 C#,它是距离函数开头的偏移量。

  • 程序集代码派生于的源代码。

  • 代码字节,即实际计算机或 MSIL 指令的字节表示形式。

  • 内存地址的符号名。

  • 对应于源代码的行号。

汇编语言指令由助记符(指令名称的缩写)和代表变量、寄存器以及常量的符号组成。 每一条机器语言指令由一个汇编语言助记符表示,(可选)后跟一个或多个符号。

汇编代码在很大程度上依赖于处理器寄存器;对于托管代码,则依赖于公共语言运行时寄存器。 可以将“反汇编”窗口与“寄存器”窗口一起使用,以便检查寄存器内容。

若要以原始数字形式而不是汇编语言查看机器代码指令,请使用“内存”窗口,或从“反汇编”窗口的快捷菜单中选择“代码字节”。

使用“反汇编”窗口

若要启用“反汇编”窗口,请在“工具”>“选项”>“调试”下,选择“启用地址级调试” 。

若要在调试期间打开“反汇编”窗口,请选择“窗口”>“反汇编”或按 Alt+8 。

注意

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于你现用的设置或版本。 若要更改设置,请在 “工具” 菜单上选择 “导入和导出设置” 。 有关详细信息,请参阅重置所有设置

若要打开或关闭可选信息,请在“反汇编”窗口中单击右键,然后在快捷菜单中设置或清除所需的选项。

左边距中的黄色箭头表示当前执行点。 对于本机代码,该执行点对应于 CPU 的程序计数器。 该位置显示程序中将要执行的下一条指令。

在内存中向上或向下翻页

在“内存”窗口或“反汇编”窗口中查看内存内容时,可以使用垂直滚动条在内存空间中上下移动

  1. 若要向下翻页(移动到较高的内存地址),请单击滚动框下方的垂直滚动条。

  2. 若要向上翻页(移动到较低的内存地址),请单击滚动块上方的垂直滚动条。

    您还将注意到垂直滚动条以非标准方式工作。 如今的计算机地址空间非常大,抓取滚动条滚动块并将其移动到任意位置,就容易找不到地址。 为此,滚动块就像“装了弹簧”,总是保持在滚动条的中心。 在本机代码应用程序中,可以向上或向下翻页,但不能随便滚动。

    在托管应用程序中,反汇编限于一个函数,因而您可以正常滚动。

    可以注意到,较高的地址出现在窗口的底部。 若要查看较高的地址,必须向下移动而不是向上移动。

向上或向下移动一个指令

  • 单击垂直滚动条顶部或底部的箭头。