diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 151c8f7e84e2e6ad698f752e41406016b9f8df34..8214a4d04db7925e0a39a31f734cd0d36307fa60 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -103,14 +103,13 @@ static inline QString _(const QByteArray &ba) return QString::fromLatin1(ba.data(), ba.size()); } -static const QString tooltipIName = _("tooltip"); - static int ¤tToken() { static int token = 0; return token; } +static const QString tooltipIName = _("tooltip"); /////////////////////////////////////////////////////////////////////// // @@ -154,6 +153,10 @@ void GdbEngine::initializeConnections() connect(&m_uploadProc, SIGNAL(error(QProcess::ProcessError)), this, SLOT(uploadProcError(QProcess::ProcessError))); + connect(&m_uploadProc, SIGNAL(readyReadStandardOutput()), + this, SLOT(readUploadStandardOutput())); + connect(&m_uploadProc, SIGNAL(readyReadStandardError()), + this, SLOT(readUploadStandardError())); // Output connect(&m_outputCollector, SIGNAL(byteDelivery(QByteArray)), @@ -273,6 +276,18 @@ void GdbEngine::uploadProcError(QProcess::ProcessError error) QMessageBox::critical(q->mainWindow(), tr("Error"), msg); } +void GdbEngine::readUploadStandardOutput() +{ + QByteArray ba = m_uploadProc.readAllStandardOutput(); + gdbOutputAvailable(_("upload-out:"), QString::fromLocal8Bit(ba, ba.length())); +} + +void GdbEngine::readUploadStandardError() +{ + QByteArray ba = m_uploadProc.readAllStandardError(); + gdbOutputAvailable(_("upload-err:"), QString::fromLocal8Bit(ba, ba.length())); +} + #if 0 static void dump(const char *first, const char *middle, const QString & to) { @@ -2751,6 +2766,7 @@ void GdbEngine::setToolTipExpression(const QPoint &pos, const QString &exp0) static const QString strNotInScope = QApplication::translate("Debugger::Internal::GdbEngine", "<not in scope>"); + static void setWatchDataValue(WatchData &data, const GdbMi &mi, int encoding = 0) { @@ -2939,8 +2955,8 @@ void GdbEngine::updateSubItem(const WatchData &data0) qDebug() << "FIXME: GdbEngine::updateSubItem:" << data.toString() << "should not happen"; #else - data.setType("<out of scope>"); - data.setValue("<out of scope>"); + data.setType(strNotInScope); + data.setValue(strNotInScope); data.setChildCount(0); insertData(data); return; @@ -3434,14 +3450,15 @@ void GdbEngine::handleDebuggingHelperValue3(const GdbResultRecord &record, // << " STREAM:" << out; if (list.isEmpty()) { //: Value for variable - data.setValue(tr("<unavailable>")); + data.setValue(strNotInScope); data.setAllUnneeded(); insertData(data); } else if (data.type == __("QString") || data.type.endsWith(__("::QString"))) { QList<QByteArray> list = out.split(' '); QString str; - for (int i = 0; i < list.size(); ++i) + int l = out.isEmpty() ? 0 : list.size(); + for (int i = 0; i < l; ++i) str.append(list.at(i).toInt()); data.setValue(_c('"') + str + _c('"')); data.setChildCount(0); @@ -3449,35 +3466,42 @@ void GdbEngine::handleDebuggingHelperValue3(const GdbResultRecord &record, insertData(data); } else if (data.type == __("QStringList") || data.type.endsWith(__("::QStringList"))) { - int l = list.size(); - //: In string list - data.setValue(tr("<%1 items>").arg(l)); - data.setChildCount(list.size()); - data.setAllUnneeded(); - insertData(data); - for (int i = 0; i < l; ++i) { - WatchData data1; - data1.name = _("[%1]").arg(i); - data1.type = data.type.left(data.type.size() - 4); - data1.iname = data.iname + _(".%1").arg(i); - data1.addr = _(list.at(i)); - data1.exp = _("((") + gdbQuoteTypes(data1.type) + _("*)") + data1.addr + _c(')'); - data1.setChildCount(0); - data1.setValueNeeded(); - QString cmd = _("qdumpqstring (") + data1.exp + _c(')'); - QVariant var; - var.setValue(data1); - postCommand(cmd, WatchUpdate, CB(handleDebuggingHelperValue3), var); + if (out.isEmpty()) { + data.setValue(tr("<0 items>")); + data.setChildCount(0); + data.setAllUnneeded(); + insertData(data); + } else { + int l = list.size(); + //: In string list + data.setValue(tr("<%1 items>").arg(l)); + data.setChildCount(list.size()); + data.setAllUnneeded(); + insertData(data); + for (int i = 0; i < l; ++i) { + WatchData data1; + data1.name = _("[%1]").arg(i); + data1.type = data.type.left(data.type.size() - 4); + data1.iname = data.iname + _(".%1").arg(i); + data1.addr = _(list.at(i)); + data1.exp = _("((") + gdbQuoteTypes(data1.type) + _("*)") + data1.addr + _c(')'); + data1.setChildCount(0); + data1.setValueNeeded(); + QString cmd = _("qdumpqstring (") + data1.exp + _c(')'); + QVariant var; + var.setValue(data1); + postCommand(cmd, WatchUpdate, CB(handleDebuggingHelperValue3), var); + } } } else { //: Value for variable - data.setValue(tr("<unavailable>")); + data.setValue(strNotInScope); data.setAllUnneeded(); insertData(data); } } else if (record.resultClass == GdbResultError) { WatchData data = cookie.value<WatchData>(); - data.setValue(tr("<unavailable>")); + data.setValue(strNotInScope); data.setAllUnneeded(); insertData(data); } diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h index 418a5096bed734d64dfe1eba689df9cb3116f431..b1750fbfd820e4d9299f5f6b5dc3425b28b1a506 100644 --- a/src/plugins/debugger/gdbengine.h +++ b/src/plugins/debugger/gdbengine.h @@ -189,6 +189,8 @@ private slots: void gdbProcError(QProcess::ProcessError error); void readGdbStandardOutput(); void readGdbStandardError(); + void readUploadStandardOutput(); + void readUploadStandardError(); void readDebugeeOutput(const QByteArray &data); void stubStarted(); void stubError(const QString &msg);