QT + VS + CUDA 没有console无法输出调试信息的解决办法
2023-09-27 14:28:32 时间
背景:QT+CUDA开发,从QCreator转到VS,遇到了两个问题:
1. QT项目运行后只有UI界面,没有Console界面,无法输出调试信息
2. 调出Console界面后只能输出CUDA核函数的printf信息,其他位置的printf信息无法输出
原文地址:使用AllocConsole在Win32程序中调用控制台调试输出 - 慕Smile - 博客园
操作流程:
1. 打开控制台
2. 重定向输出流
3. 输出信息
代码:
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "This is a test info" << std::endl;
相关函数说明:
AllocConsole函数的功能是为当前的窗口程序申请一个Console窗口,其原型为
BOOL AllocConsole(void);
函数调用成功,返回非零值,调用不成功则返回0。
freopen函数用来替换一个流,或者说重新分配文件指针,以实现重定向。可重定向的流有:标准输入流、标准输出流或者标准错误流。其函数原型为
FILE *freopen(const char *path, const char *mode, FILE *stream);
其中"CONOUT$"是指代当前console的特殊字符串,"w"表明以written模式打开这个console,stdout指代标准输出流。
比较神奇的是,在三台电脑上进行了测试,其中一台电脑不需要freopen就可以直接输出所有的printf信息,另外两台可以输出cuda核函数内的printf信息(需要cudaDeviceSyn函数),但无法输出核函数外的printf信息。
添加freopen函数后解决。
补充:
printf延迟输出的解决方案:
1.设置缓存区为0
setbuf(stdout, NULL);
2.刷新缓存区
fflush(stdout);
相关文章
- 【VS开发】【Qt开发】使用process explorer查看exe调用dll的情况
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
- 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容
- 【Qt开发】Qt中图像的显示与基本操作
- 【Qt开发】【VS开发】VS2010+Qt开发环境搭建
- QT VS 菜单栏/工具栏按钮的访问
- 【QT】QT正则表达式
- qt模拟鼠标左击下移动
- 第九章、Qt Designer可视化设计界面布局组件介绍
- QT与arduino互动实现雷达扫描效果
- 37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面、UDP校验登录、皮肤更换、3D旋转)
- qt之double类型判断
- qt之控件(QGroupBox、xx)在window和linux差异化解决办法
- Qt浅谈之一:内存泄露(总结)
- VS_Qt 常见错误(持续更新)