[Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
2015-05-10 00:54
351 查看
场景:1. 开发Windows界面程序时,需要打印输出,断点在调试多线程程序有局限性,就是会干扰线程的优先顺序,看不到正确的结果,往往就是断点就没事,
没断点程序就不能正常运行了; 还有输出能看到程序的执行过程,断点的话就太麻烦了,你得不停的按快捷键。
2. 使用动态库(静态库)时,出现问题时在Dll里写std::cout输出信息是必不可少的调试方法,特别对于多线程程序,谁先谁后暂停后的结果就会不一样了。
有时候没有动态库的代码时,也没法对动态库打断点。
3. 打开控制台窗口后只能看到WIndows程序的输出而无法看到Dll的输出?
4. 直接改配置属性-》链接器-》子系统为 控制台 (/SUBSYSTEM:CONSOLE) 是不现实的,因为我们开发的是界面程序。
方法1, 在输出窗口查看打印日志,使用函数:
方法2, 像Console程序那样打开控制台窗口,不需要OutputDebugString,为了查看std::cout, printf输出, 添加代码:
结束时调用
问题来了
我们自己写的Dll库里写的std::cout输出并没有打印出来?
原因就是Dll和Windows使用的不是同一个运行时库,所以导致OpenConsole()对动态库无效.
解决办法就是有2个步骤要确认,界面和动态库都需要同样的配置:
1. 配置属性-》常规-》MFC的使用: 在共享DLL中使用MFC
2. 配置属性-》C/C++ -》代码生成-》多线程调试 DLL(/MDd)
现在已经可以在控制台看到DLL的输出了,解决,不谢.^-^
参考:
没断点程序就不能正常运行了; 还有输出能看到程序的执行过程,断点的话就太麻烦了,你得不停的按快捷键。
2. 使用动态库(静态库)时,出现问题时在Dll里写std::cout输出信息是必不可少的调试方法,特别对于多线程程序,谁先谁后暂停后的结果就会不一样了。
有时候没有动态库的代码时,也没法对动态库打断点。
3. 打开控制台窗口后只能看到WIndows程序的输出而无法看到Dll的输出?
4. 直接改配置属性-》链接器-》子系统为 控制台 (/SUBSYSTEM:CONSOLE) 是不现实的,因为我们开发的是界面程序。
方法1, 在输出窗口查看打印日志,使用函数:
void WINAPI OutputDebugString( __in_opt LPCTSTR lpOutputString );
方法2, 像Console程序那样打开控制台窗口,不需要OutputDebugString,为了查看std::cout, printf输出, 添加代码:
static void OpenConsole() { AllocConsole(); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); int hCrt = _open_osfhandle((long)handle,_O_TEXT); FILE * hf = _fdopen( hCrt, "w" ); *stdout = *hf; }在 _tWinMain 的开始调用
#ifdef _DEBUG OpenConsole(); #endif
结束时调用
#ifdef _DEBUG FreeConsole(); #endif
问题来了
我们自己写的Dll库里写的std::cout输出并没有打印出来?
原因就是Dll和Windows使用的不是同一个运行时库,所以导致OpenConsole()对动态库无效.
解决办法就是有2个步骤要确认,界面和动态库都需要同样的配置:
1. 配置属性-》常规-》MFC的使用: 在共享DLL中使用MFC
2. 配置属性-》C/C++ -》代码生成-》多线程调试 DLL(/MDd)
现在已经可以在控制台看到DLL的输出了,解决,不谢.^-^
参考:
Redirecting console output of c++ dll used in MFC GUI application
相关文章推荐
- [Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
- Windows下更改C/C++控制台程序文本输出颜色
- 在Windows的控制台界面下输出BMPString的内容
- c#中重定向windows控制台程序的输出信息
- 用qDebug调试输出QT控制台程序(windows)
- windows下编程额外打开一个控制台输出调试信息
- 如何在Win32窗口程序中发命令打开一个控制台,往里面打印(printf())输出一些数据
- Windows程序使用控制台输出监视的变量(原来这样也可以)
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- Java程序将输出到控制台的语句存入文件和windows DOS将文字输入到文件中
- 雅阁笔迹之windows编程——在MFC或Win32打开控制台界面
- 在当前目录打开控制台程序(windows)
- c#中重定向windows控制台程序的输出信息
- MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)
- c#中重定向windows控制台程序的输出信息 - jinjazz - CSDNBlog
- c#中重定向windows控制台程序的输出信息
- c++ 在win32程序中打开控制台 并重定向输出