我已经在Windows上学习了一段时间(unix/embedded中的背景),并希望从我的win32 qt GUI应用程序中将stderr/stdout从某处(单元测试/事件记录/调试)转出.这似乎是Windows中的一个高级订单,我发现stackoverflow上的这篇文章解释了原因.
我发现自己想知道为什么qt没有一个简单的机制来执行调试版本的帖子中的一些建议.
这样的设施是否已经存在于qt中,或者我是自己滚动(或找到一个syslog lib)?
在Windows 8上,我们遇到了FreeConsole的问题.它似乎关闭了stdio句柄,而没有关闭文件流.
这可能是Windows 8的问题,或者可能是我根本不理解Windows控制台/ GUI应用程序子系统执行操作的方式(完全荒谬).
这是怎么回事?
下面的最小例子.使用静态链接的CRT对编译器进行测试:VS2005,VS2013,VS2017.
#include <windows.h>
#include <io.h>
#include <stdio.h>
static void testHandle(FILE* file) {
HANDLE h = (HANDLE)_get_osfhandle(fileno(file));
DWORD flags;
if (!GetHandleInformation(h, &flags)) {
MessageBoxA(0, "Bogus handle!!", "TITLE", MB_OK);
}
}
int main(int argc, char** argv)
{
freopen("NUL", "wb", stdout); // Demonstrate the issue with NUL
// Leave stderr as it is, to demonstrate the issue with handles
// to the console device.
FreeConsole();
testHandle(stdout);
testHandle(stderr);
}
Run Code Online (Sandbox Code Playgroud)