【已解决】QProcess 调用 GDB 无法弹出重定向输入窗口



  • 我们现在在用Qt写一个很简单的单文件IDE(只对单文件编译运行,只运行命令行程序)。在写调试功能的时候遇到了点麻烦:我们用QProcess去调用GDB(使用Machine Interface)并且通过readyReadStandardOutput接收消息。我们希望和多数IDE一样:能弹出程序terminal进行输入输出。但是现在弹不出来这个窗口。
    例如:我们写了个很简单的a.c:

    #include <stdio.h>
    int main()
    {
    printf("Hello World!\n");
    return 0;
    }

    然后编译成a.exe,之后我们用QProcess启动GDB去调试a.exe。正常情况下IDE此时能弹出一个terminal窗口来显示Hello World,但是我们现在显示不出来。

    我们在代码里是这么写的:

       QStringList _arg;
        _arg<<filePath<<"--interpreter"<<"mi";
                SIGNAL(readyReadStandardOutput()),
                this,
                SLOT(readGdbStandardOutput()));
        connect(gdbProcess.data(),
                SIGNAL(readyReadStandardError()),
                this,
                SLOT(readGdbStandardError()));
        gdbProcess->start(gdbPath,_arg);
    

    后来我看了下Qt Creator的代码,我理解里面用了tty进行重定向,并且使用了自己写的QMLJS终端。但是QMLJS的移植成本太高了。而且我们还找到一个IDE:Manna,它的另一个版本也叫做GUIDE(Gait Universal IDE)。使用Qt 4写的。里面没有任何额外的重定向却也能弹出命令行终端窗口。这个项目的GDB部分代码在这里可以找到:
    https://www.assembla.com/code/manna/subversion/nodes/3/trunk/Manna/src/gdbdebug.cpp
    请教一下社区的各位:如何才能弹出terminal窗口?是GDB的调用参数有问题么?那Manna的实现是怎么做到的?这个问题困扰我好久了。希望大家能帮帮我解决这个问题。谢谢!



  • 问题解决了,Windows下使用set new-console on即可。Linux下使用tty。


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.