如何让PowerShell运行的.exe将OutputDebugString单元测试日志输出到命令行?
解决OutputDebugString日志无法在命令行显示的问题
不修改程序的快速方案
- 使用DebugView命令行工具捕获输出
微软的DebugView工具附带命令行版本dbgvcmd.exe,可捕获系统中所有OutputDebugString输出并打印到控制台,步骤如下:- 下载并解压DebugView工具(包含
dbgvcmd.exe) - 在命令行执行:
dbgvcmd /c /t - 保持该窗口打开,在新命令行窗口运行你的程序.exe
此时程序中OutputDebugString的日志会实时显示在运行dbgvcmd的控制台窗口中。
- 下载并解压DebugView工具(包含
修改代码的持久化方案
若希望程序在命令行运行时自动将OutputDebugString日志输出到控制台,可封装日志输出函数,同时向调试器和控制台发送内容:
C语言示例
#include <windows.h> #include <stdio.h> void DebugLog(const char* format, ...) { char buffer[1024]; va_list args; va_start(args, format); vsnprintf(buffer, sizeof(buffer), format, args); va_end(args); OutputDebugStringA(buffer); printf("%s\n", buffer); }
C++语言示例
#include <windows.h> #include <iostream> #include <cstdarg> void DebugLog(const char* format, ...) { char buffer[1024]; va_list args; va_start(args, format); vsnprintf(buffer, sizeof(buffer), format, args); va_end(args); OutputDebugStringA(buffer); std::cout << buffer << std::endl; }
将所有原OutputDebugString调用替换为该封装函数,即可同时在VS调试窗口和命令行查看日志。
单元测试框架的特殊配置
若使用第三方单元测试框架,可通过框架配置强制输出日志到控制台:
- Google Test:添加命令行参数
--gtest_output=stdout,将测试日志定向到标准输出 - Catch2:通过命令行参数
-o console::cout,或在代码中配置Catch::Session的输出流为std::cout
内容的提问来源于stack exchange,提问作者Lucian Thorr
相关产品推荐
相关产品推荐

