Windows系统下如何使用PowerShell或命令提示符调试C++编译的.exe文件
解答
结论
完全可以通过PowerShell/命令提示符调试C编译的调试版exe,Windows官方提供了命令行调试工具cdb.exe(Console Debugger),和Visual Studio调试底层使用相同的引擎,完全支持调试调试模式编译的C程序。
前置准备
- 确认你编译生成的.exe同目录下存在对应的.pdb符号文件(VS调试模式编译时会自动生成,是调试识别代码、变量的必要前提)
- 确认你可以调用
cdb.exe:安装Visual Studio时默认会同步安装Windows调试工具集,直接在PowerShell/CMD中输入cdb如果没有报命令不存在即可正常使用;如果提示找不到命令,到VS安装目录下的Windows Kits子目录搜索cdb.exe,将对应x86/x64版本的所在路径添加到系统Path环境变量即可。
调试Hello World示例
示例程序准备
假设你有如下C++代码,已经通过VS调试模式编译为HelloDemo.exe,同目录生成了HelloDemo.pdb:
#include <iostream> int main() { int test_num1 = 10; std::cout << "Hello World!" << std::endl; int test_num2 = 20; int sum = test_num1 + test_num2; return 0; }
调试操作步骤
- 打开PowerShell或者命令提示符,切换到
HelloDemo.exe所在的文件夹 - 启动调试会话,输入命令:
cdb HelloDemo.exe
回车后会进入cdb的交互调试界面
3. 在main函数入口设置断点,输入命令后回车:
bp main
提示断点设置成功即可
4. 启动程序并运行到断点位置,输入命令后回车:
g
程序会启动并停在main函数的第一行代码处
5. 单步执行代码(步过,不进入函数内部),每输入一次命令执行一行代码:
p
连续执行2次p,即可运行完Hello World输出的代码行,此时你可以在控制台看到Hello World!的输出
6. 查看变量值,输入对应命令即可输出变量当前值:
// 查看test_num1的值 dv test_num1 // 执行到test_num2赋值后,查看test_num2的值 dv test_num2 // 执行到sum赋值后,查看sum的计算结果 dv sum
- 继续执行完剩余所有代码:
g
程序运行结束后会自动退出调试会话
8. 如需中途强制退出调试,输入命令后回车即可:
q
补充说明
- 调试32位程序请使用x86版本的cdb.exe,调试64位程序请使用x64版本的cdb.exe,否则会出现符号不匹配的问题
- 如果需要附加到已经在运行的exe进程调试,使用命令
cdb -p <你的进程ID>即可 - 所有cdb命令均支持在PowerShell和CMD中无差别使用
内容的提问来源于stack exchange,提问作者Mathematician
相关产品推荐
相关产品推荐

