本次将介绍 Visual Studio Debug Windows,也就是 VS 常用的 Debug 窗口。
因为每个窗口的功能都十分繁多,所以这里只做基本介绍,不做详解,有需要的朋友可参考 MSDN 或者在使用的过程中自行研究。
注意,只有程序在调试时挂起的时候,下面的大部分窗口才可以出现并使用。还有就是有的截图实在找不到英文版的,就只能用我自己本地中文版的了。
Autos 窗口显示的是当前行以及前面一行(C#,VB)或者三行(C++)的变量和当前值。
Locals 窗口显示的是当前范围内定义的变量,通常是当前正在执行的函数或方法。
Watch 窗口显示的是自己想要查看的变量或者表达式。
在变量处右击选择「Add Watch」,即可把变量添加至 Watch 窗口,进而在程序执行的时候,查看该变量值的变化情况。
VS 可以同时显示四个 Watch 窗口,功能是一样的。
与 Autos 和 Locals 窗口不同的是,Watch 窗口中的变量会一直存在并显示,只不过超出范围后会变灰。
除了查看变量,Watch 窗口还可以计算表达式。
与 Watch 窗口可以同时显示多个变量不同的是,QuickWatch 窗口一次只能显示一个变量或者表达式。
Memory 窗口显示的是应用程序的内存空间,可以查看指定地址中的内容。
在地址栏中输入地址的时候,除了用具体的 32 bit 地址,也可以用指针 (前提是该指针在当前范围内)。
右上方的列表示一行显示多少个 Byte 的数据,可以选择 8,16,32,64 等。
Autos,Locals,Watch 和 QuickWatch窗口中的大多数变量的值都可以在程序运行的时候手动进行更改。Memory 窗口中的值同样也可以在程序运行的时候手动更改。
变量或者内存的值在运行时发生变化的时候,会变成红色。
另外,可以右键选择十六进制显示,方便查看。
Breakpoints 窗口用来管理用户设置的所有断点,也就是说,你所设置的所有断点都会出现在这里。
可以勾选前面的单选框来 Enable / Disable 一个或多个断点。也可以使用上方的删除按钮来删除所有的断点。
Call Stack 窗口显示的是函数或者方法的调用顺序。
如上图,第一行黄色箭头指向的是当前正在执行的函数 (本例中为 Update)。第二行代表的是第一行的被调函数(本例中,Path.set 调用 Update),以此类推。
对于查看函数或者方法的执行流程,Call Stack 窗口非常有用。
在 Call Stack 窗口右键,会有很多实用的功能。
具体功能就不详细展开来说了,看名字就能猜出来。
如果是 Visual Studio Enterprise 的话,Call Stack 窗口还可以显示 Code Map,也就是函数调用关系图。
Modules 窗口显示的是当前程序正在使用的 EXE 和 DLL,及其相关的一些信息。
在 Symbol Status (符号状态) 一列可以看出 Debug 符号表的加载情况。右键可以手动加载 PDB 文件。
Thread 窗口显示的是当前程序涉及到的所有的线程。
黄色箭头指向当前线程。
窗口上方有一系列的快捷键可以使用,例如可以显示每个线程的 Call Stack, 可以对线程进行分组,还可以 Suspend 和 Resume 线程。
关于 Thread 窗口,更多的使用方法将在后续的如何调试多线程的教程中讲到。
Disassembly 窗口显示的是编译器创建的指令对应的汇编代码。
如果是托管代码,对应的是 Just-in-Time (JIT) 编译器创建的本地代码,而不是由 VS 编译器生成的 Microsoft intermediate language (MSIL)。
右键可以显示每个指令所在的存储器地址,代码字节,内存地址的符号名称等。
只有在 Debug -> Option 菜单中启用地址级调试的时候,Disassembly 窗口才可以使用。
Register 窗口显示的是寄存器的值。它们的值可以在程序运行的时候手动进行更改。
同理,Register 窗口也只有在 Debug -> Option 菜单中启用地址级调试的时候,才可以使用。
Immediate 窗口用于在调试的时候计算变量值,表达式的值,函数的值等。另外,还可以用来执行单条 VS cmd。
在 Immediate 窗口执行 cmd 的时候,前面必须用「>」符号。
因为 Debug.Print 的别名是 「?」,所以也可以这样使用。
查看别名。
具体用法如下。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!