1.win32 调试技巧-添加控制台调试
涉及api:
AllocConsole() ;
freopen/freopen_s
GetStdHandle
WriteConsole
FreeConsole
涉及字符串:
conout$, --控制台标准输出
conin$, --控制台标准输入
conerr$ --控制台标准错误
2.代码
方法1:最原始的方式:先分配控制台,然后获得句柄,再输出
AllocConsole() ;
HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE) ;
WriteConsole(hd , "hello hplonline" , sizeof("hello hplonline") , NULL , NULL );
CloseHandle(hd) ;
缺点:每次都要调用WriteConsole
方法2:对stdin,stdout,stderr重定向
freopen版本:
::AllocConsole();
freopen("conout$","w",stdout) ;
freopen("conout$","w",stderr) ;
//使用下面会自动输出到控制台
printf... ;
std::cout...;
std::cerr...;
//最终不用时释放
::FreeConsole();
注意:创建项目时关闭项目开发周期安全检查,或者在项目属性->C/C++->命令行中添加/D _CRT_SECURE_NO_WARNINGS ,否者会出现freopen报错的问题。当然也可以用freopen_s来重定向
freopen_s版本:
::AllocConsole();
FILE *pOut = NULL;
freopen_s(&pOut,, "conout$","w",stdout) ;
freopen_s(&pOut,, "conout$","w",stderr) ;
//使用下面会自动输出到控制台
printf... ;
std::cout...;
std::cerr...;
//最终不用时释放
::FreeConsole();