WinDbg 使用快速入门
为新手准备的 WinDbg 使用分步教程。
引言
WinDbg 是一个功能强大且易于使用的调试器。它提供了图形用户界面和命令提示符接口。安装包轻巧,可以快速安装在目标机器上。
我注意到,初次使用 WinDbg 的用户会感到困惑。用户需要指向源文件、PDB 文件和可执行文件的正确位置,然后才能使用 WinDbg 进行调试。对于除了 Visual Studio 之外调试经验很少的新手来说,它不是非常直观。在这个简短的演示中,我想通过图片,详细地一步一步展示如何为您的调试目的设置 WinDbg。
安装
首先,需要安装调试工具的 MSI 包。最新的 MSI 包可以从Microsoft 网站获取。
您可以下载并安装几个 MSI 包,选择 32 位或 64 位版本并下载最新版本。安装完成后,您可以从“开始”菜单启动 WinDbg。
示例程序
现在,让我们创建一个小的 C++ 程序来计算 GCD(最大公约数)。
文件 main.cpp
#include <stdio.h> #include <stdlib.h> int calculateGCD(int a, int b); void printHelp(); int main( int argc, const char* argv[] ) { int numA, numB, gcd; if (argc != 3) { printHelp(); return -1; } numA = atoi( argv[1] ); numB = atoi( argv[2] ); if(numA == 0 || numB == 0) { printf("Wrong input format, see help"); printHelp(); return -1; } // Make sure that numA is not less then numB // otherwise change them places if (numA < numB) { numA = numA ^ numB; // 0^1 = 1, 0^0 = 0, 1^1 = 0, 1^0=1; numB = numA ^ numB; numA = numA ^ numB; } gcd = calculateGCD(numA, numB); printf("Common divisor is: %d", gcd); return 0; } int calculateGCD(int biggerNum, int smallerNum) { int remainder = biggerNum % smallerNum; if (remainder == 0) return smallerNum; return calculateGCD(smallerNum, remainder); } void printHelp() { printf("This tool calculates a common greatest divisor"); printf("Usage: comdiv integerNumberA integerNumberB"); }
现在,以调试模式编译并构建它,这样您就可以获得 comdiv.exe 和 comdiv.pdb 文件。让我们将这些文件以及源文件 main.cpp 放入一个专用文件夹,例如 C:\windbgtest。
WinDbg
现在,让我们从“开始”菜单启动 WinDbg。
现在,为了开始调试,我们需要将 WinDbg 指向符号文件 comdiv.pdb、源文件 main.cpp 以及可执行文件 comdiv.exe。
转到“文件”->“符号文件路径”,并在对话框中指定 C:\windbgtest。
对“文件”->“源文件路径”和“文件”->“映像文件路径”执行相同的操作。
现在,转到“文件”->“打开可执行文件”,并在对话框中指定 comdiv.exe 文件。
还可以像图片中那样指定参数。这将使 comdiv.exe 找到 18 和 24 的 GCD。单击“打开”按钮后,对于弹出的建议保存工作区信息的对话框,请按“否”(这并不重要)。
此时,您将看到 WinDbg 已创建 comdiv.exe 进程。
现在,WinDbg 刚刚创建了运行 comdiv.exe 的进程,但尚未运行它。因此,此时,您可以设置断点。
让我们在 WinDbg 中打开源文件 main.cpp 并在那里设置断点。转到“文件”->“打开源文件”,并在那里指定 C:\windbgtest\main.cpp。
单击“打开”后,您将看到您的源代码。
现在,将光标放在第 11 行(“if (argc != 3)
”)上,然后按 F9(或单击工具栏中的“手”图标)。
您可能会看到这个对话框弹出。
如果看到这个对话框,请按“是”,您将设置好断点。
现在,红线表示您的断点已设置并准备被命中。
按 F5 运行程序,它将在您的断点行处中断(您会看到红线变为粉红色)。
现在,您可以使用工具栏或标准的 F* 键单步执行源代码:F10 - 步过,F11 或 F8 - 步入,依此类推。
“视图”和“调试”菜单中有许多标准的调试命令,只需探索并尝试它们。
您还可以将鼠标悬停在局部变量上并查看它们的值(如下图所示;您还可以看到当前执行点,它以蓝色高亮显示)。
现在,您已经全部准备就绪!