我有一个GUI程序,可以在单独的窗口中打开Windows控制台以显示输出并接受用户输入。我的开发环境是Qt 4.7.1 with mingw。控制台工作正常,直到我尝试在Qt的调试器(gdb)中运行该程序;然后,虽然AllocConsole成功,并且GetStdHandle似乎返回有效句柄(0x000000d8),但任何使用该句柄的尝试都会导致Windows错误6(句柄无效)。
所以我无法调试我的程序。这是一种痛苦,因为它有一些严重的错误。问题可能是gdb的控制台阻止我打开自己的控制台;但是为什么AllocConsole和GetStdHandle会成功呢?我升级到Qt Creator 2.0.94(Qt 4.7.1),但它没有帮助。有什么想法吗?
更新我发现我可以通过在没有调试器的情况下运行它来调试程序,然后从Qt附加到它。不理想,但总比没有好。
答案 0 :(得分:1)
您无法使用标准输出控制台 CONFIG + = console 在.pro文件中?
嗯 - 检查this:
进程只能与一个控制台关联,因此如果调用进程已有控制台,则AllocConsole函数将失败。进程可以使用FreeConsole函数将其自身与当前控制台分离,然后它可以调用AllocConsole来创建新控制台或AttachConsole以附加到另一个控制台。
你可以在创建你的之前尝试运行FreeConsole吗?