我有一个复杂的 >>cygwin<< Windows 应用程序(又名子系统窗口),我想添加一个调试控制台。我已经尝试了以下变体,但都不适合我。
控制台出现并更改了标题,但仍然是死黑的,没有显示输出。
变体 1)
ok = AllocConsole();
if (ok) {
h = GetStdHandle(STD_OUTPUT_HANDLE);
fd = _open_osfhandle((intptr_t)h, O_TEXT);
fp = _fdopen( fd, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );
fprintf(stdout, "Hello worldd\n");
SetConsoleTitle("VM Debug");
}
变体 2)
freopen("conout$","w",stdout);
fprintf(...
变体 3)
freopen("/dev/conout","w",stdout);
fprintf(...
这个问题可能已经回答了很多次,但没有一个解决方案对我有用。
谁能帮帮我?
但请记住:这一定是一个 cygwin 问题,我需要一个 cywin 解决方案,因为我知道一个或另一个变体在 MSVC 或 BorlandC 下工作。 任何答案都有帮助,甚至有人说 cygwin 坏了,我没有解决方案。
最佳答案
是的,这是一个cygwin问题。 Cygwin 的家伙们其实已经很努力地尽可能地模拟一个“unix”环境,所以常见的 W32 技巧是行不通的。您无论如何都可以使用 WriteConsole 函数在新控制台上写入消息,但我发现这不是您想要的。过去我遇到过类似的问题,解决方法是创建一个 pipe(),将其重定向到 stdout/stderr,然后创建一个从管道端接收字符的线程,通过 WriteConsole 将它们写入新的控制台。不容易。
此外,我认为 cygwin 的控制台管理随着不同的版本发生了多次变化,因此可能似乎适用于一个版本的技巧在另一个版本上就不再适用了。
这是一个狂野的世界......
关于c - 如何在cygwin下AllocConsole + Stdout重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882089/