一、使用“反汇编”窗口
“反汇编”窗口显示与编译器创建的指令对应的汇编代码。如果正在调试托管代码,则这些程序集指令对应于由 JIT 编译器创建的本机代码,而不是由 Visual Studio 编译器生成的中间语言。
注意 此项功能不适用于 SQL 调试。
显示“反汇编”窗口
- 从“调试”菜单中选择“窗口”并单击“反汇编”。(调试器必须正在运行或处于中断模式。)
除程序集指令外,还可显示如下可选信息:
- 每条指令所在的内存地址(对于本机应用程序,这是实际的内存地址。对于 Visual Basic、C# 或托管代码,这是距离函数开头的偏移量。)
- 程序集代码派生自的源代码
- 代码字节(实际计算机或 IL 指令的字节表示形式)
- 内存地址的符号名
- 与源代码对应的行号
打开或关闭可选信息
- 右击“反汇编”窗口并设置或清除快捷菜单中的所需选项。
左边距中的黄色箭头表示当前执行点的位置。对于本机代码,这对应于 CPU 的程序计数器。该位置显示程序中将要执行的下一条指令。
二、调试基础知识:“反汇编”窗口
“反汇编”窗口显示由源代码所创建的基本指令。当然不是要去读二进制或十六进制机器指令,指令被反汇编为汇编语言格式。(反汇编这个术语来自一个称做反汇编器的程序员工具。汇编器是一个程序,它读入汇编语言代码并将其汇编为可执行的机器指令。反汇编器恰好相反,读入机器代码并将其转化为汇编语言格式。反汇编器有各种用途,如将源代码丢失的程序转换为人工可读的汇编语言程序。)
汇编语言代码由助记符(指令名称的缩写)和代表变量、寄存器以及常量的符号所组成。每一条机器语言指令由一个汇编语言助记符代表,通常其后还跟有一个或多个变量、寄存器或常量。
“反汇编”窗口可用于托管或非托管代码。但对于脚本或 SQL 调试是不可用的。
如果你不会读汇编语言而又想很好地利用“反汇编”窗口,请参考有关汇编语言编程的较好的书。要学会汇编语言编程需要很大决心,但汇编语言也并非某些人想象的那样糟糕。但这超出了我们的讨论范围。
汇编语言代码严重依赖处理器的寄存器(对托管代码而言,依赖公共语言运行库寄存器),同时使用“反汇编”窗口和“寄存器”窗口(利用它可看到寄存器内容)将很有好处。有关更多信息,请参见调试基础知识:“寄存器”窗口。
您很可能愿意使用汇编语言,而从来不会愿意或需要查看原始的、数字形式的机器代码指令。不过,如果愿意的话,可以利用“内存”窗口或从“反汇编”窗口的快捷菜单中选取“代码字节”来查看。
参考博客