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

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

注释

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

仅当启用地址级调试时,此功能才可用。 它不适用于脚本或 SQL 调试。

除程序集说明外, 反汇编 窗口还可以显示以下可选信息:

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

  • 用于生成汇编代码的源代码。

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

  • 内存地址的符号名称。

  • 对应于源代码的行号。

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

程序集代码严重依赖于处理器寄存器,或者对于托管代码,公共语言运行时寄存器。 可以使用 反汇编 窗口和 寄存器 窗口来检查寄存器内容。

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

使用“反汇编”窗口

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

若要在调试过程中打开 反汇编 窗口,请选择 “调试>Windows>反汇编” 或按 Ctrl + Alt + D

注释

你看到的对话框和菜单命令可能与本文中所述的命令不同,具体取决于你的活动设置或版本。 若要更改设置,请选择“工具”菜单上的“导入和导出设置”。 有关详细信息,请参阅 “重置所有设置”。

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

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

在内存中向上或向下翻页

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

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

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

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

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

    你会注意到,更高的地址显示在窗口底部。 若要查看更高的地址,必须向下移动,而不是向上移动。

向上或向下移动一个指令

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