From e3712f96874358dbd97be11a5b80a9a3c07c6747 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Tue, 5 Jan 2010 16:51:55 +0100 Subject: [PATCH] debugger: refactoring, use QByteArray instead of QString when appropriate --- src/plugins/debugger/breakhandler.cpp | 14 +- src/plugins/debugger/breakhandler.h | 36 +- src/plugins/debugger/cdb/cdbassembler.cpp | 2 +- src/plugins/debugger/cdb/cdbbreakpoint.cpp | 2 +- src/plugins/debugger/cdb/cdbdebugengine.cpp | 4 +- .../debugger/cdb/cdbstackframecontext.cpp | 2 +- .../debugger/cdb/cdbsymbolgroupcontext.cpp | 6 +- .../debugger/cdb/cdbsymbolgroupcontext_tpl.h | 2 +- src/plugins/debugger/gdb/attachgdbadapter.cpp | 2 +- src/plugins/debugger/gdb/coregdbadapter.cpp | 11 +- src/plugins/debugger/gdb/gdbengine.cpp | 633 +++++++++--------- src/plugins/debugger/gdb/gdbengine.h | 12 +- src/plugins/debugger/gdb/plaingdbadapter.cpp | 16 +- src/plugins/debugger/gdb/remotegdbadapter.cpp | 29 +- src/plugins/debugger/gdb/termgdbadapter.cpp | 5 +- src/plugins/debugger/gdb/trkgdbadapter.cpp | 12 +- src/plugins/debugger/registerhandler.h | 4 +- src/plugins/debugger/script/scriptengine.cpp | 8 +- src/plugins/debugger/watchhandler.cpp | 59 +- src/plugins/debugger/watchhandler.h | 42 +- src/plugins/debugger/watchutils.cpp | 65 +- src/plugins/debugger/watchutils.h | 3 +- 22 files changed, 498 insertions(+), 471 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index b207360bd72..b77c26d9f83 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -139,7 +139,7 @@ public: } } } - m_data->lineNumber = QString::number(lineNumber); + m_data->lineNumber = QByteArray::number(lineNumber); m_data->handler()->updateMarkers(); } @@ -386,13 +386,13 @@ void BreakHandler::loadBreakpoints() data->fileName = v.toString(); v = map.value(QLatin1String("linenumber")); if (v.isValid()) - data->lineNumber = v.toString(); + data->lineNumber = v.toString().toLatin1(); v = map.value(QLatin1String("condition")); if (v.isValid()) - data->condition = v.toString(); + data->condition = v.toString().toLatin1(); v = map.value(QLatin1String("ignorecount")); if (v.isValid()) - data->ignoreCount = v.toInt(); + data->ignoreCount = v.toString().toLatin1(); v = map.value(QLatin1String("funcname")); if (v.isValid()) data->funcName = v.toString(); @@ -561,7 +561,7 @@ bool BreakHandler::setData(const QModelIndex &mi, const QVariant &value, int rol case 4: { QString val = value.toString(); if (val != data->condition) { - data->condition = val; + data->condition = val.toLatin1(); dataChanged(mi, mi); } return true; @@ -569,7 +569,7 @@ bool BreakHandler::setData(const QModelIndex &mi, const QVariant &value, int rol case 5: { QString val = value.toString(); if (val != data->ignoreCount) { - data->ignoreCount = val; + data->ignoreCount = val.toLatin1(); dataChanged(mi, mi); } return true; @@ -660,7 +660,7 @@ void BreakHandler::setBreakpoint(const QString &fileName, int lineNumber) BreakpointData *data = new BreakpointData(this); data->fileName = fileName; - data->lineNumber = QString::number(lineNumber); + data->lineNumber = QByteArray::number(lineNumber); data->pending = true; data->markerFileName = fileName; data->markerLineNumber = lineNumber; diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 75058ffc640..7127c4180ae 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -69,30 +69,30 @@ private: BreakpointData(const BreakpointData &); // Our owner - BreakHandler *m_handler; // not owned. + BreakHandler *m_handler; // not owned. public: - bool enabled; // should we talk to the debugger engine? - bool pending; // does the debugger engine know about us already? + bool enabled; // should we talk to the debugger engine? + bool pending; // does the debugger engine know about us already? // this "user requested information". will get stored in the session - QString fileName; // short name of source file - QString condition; // condition associated with breakpoint - QString ignoreCount; // ignore count associated with breakpoint - QString lineNumber; // line in source file - QString funcName; // name of containing function - bool useFullPath; // should we use the full path when setting the bp? + QString fileName; // short name of source file + QByteArray condition; // condition associated with breakpoint + QByteArray ignoreCount; // ignore count associated with breakpoint + QByteArray lineNumber; // line in source file + QString funcName; // name of containing function + bool useFullPath; // should we use the full path when setting the bp? // this is what gdb produced in response - QString bpNumber; // breakpoint number assigned by the debugger engine - QString bpCondition; // condition acknowledged by the debugger engine - QString bpIgnoreCount; // ignore count acknowledged by the debugger engine - QString bpFileName; // file name acknowledged by the debugger engine - QString bpLineNumber; // line number acknowledged by the debugger engine - QString bpFuncName; // function name acknowledged by the debugger engine - QString bpAddress; // address acknowledged by the debugger engine - bool bpMultiple; // happens in constructors/gdb - bool bpEnabled; // enable/disable command sent + QByteArray bpNumber; // breakpoint number assigned by the debugger engine + QByteArray bpCondition; // condition acknowledged by the debugger engine + QByteArray bpIgnoreCount;// ignore count acknowledged by the debugger engine + QString bpFileName; // file name acknowledged by the debugger engine + QByteArray bpLineNumber; // line number acknowledged by the debugger engine + QString bpFuncName; // function name acknowledged by the debugger engine + QString bpAddress; // address acknowledged by the debugger engine + bool bpMultiple; // happens in constructors/gdb + bool bpEnabled; // enable/disable command sent // taken from either user input or gdb responses QString markerFileName; // used to locate the marker diff --git a/src/plugins/debugger/cdb/cdbassembler.cpp b/src/plugins/debugger/cdb/cdbassembler.cpp index 1e27cf53f32..43d698ab627 100644 --- a/src/plugins/debugger/cdb/cdbassembler.cpp +++ b/src/plugins/debugger/cdb/cdbassembler.cpp @@ -84,7 +84,7 @@ bool getRegisters(CIDebugControl *ctl, return false; } Register reg; - reg.name = QString::fromUtf16(reinterpret_cast<const ushort *>(wszBuf)); + reg.name = QString::fromUtf16(reinterpret_cast<const ushort *>(wszBuf)).toLatin1(); registers->push_back(reg); } // get values diff --git a/src/plugins/debugger/cdb/cdbbreakpoint.cpp b/src/plugins/debugger/cdb/cdbbreakpoint.cpp index 4393c6a3612..9ec69d3be35 100644 --- a/src/plugins/debugger/cdb/cdbbreakpoint.cpp +++ b/src/plugins/debugger/cdb/cdbbreakpoint.cpp @@ -564,7 +564,7 @@ bool CDBBreakPoint::synchronizeBreakPoints(CIDebugControl* debugControl, handler->takeInsertedBreakPoint(nbd); updateMarkers = true; nbd->pending = false; - nbd->bpNumber = QString::number(id); + nbd->bpNumber = QByteArray::number(uint(id)); nbd->bpAddress = QLatin1String("0x") + QString::number(address, 16); // Take over rest as is nbd->bpCondition = nbd->condition; diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp index 54041804045..fc4d0136fb5 100644 --- a/src/plugins/debugger/cdb/cdbdebugengine.cpp +++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp @@ -985,7 +985,7 @@ void CdbDebugEngine::updateWatchData(const WatchData &incomplete) qDebug() << Q_FUNC_INFO << "\n " << incomplete.toString(); WatchHandler *watchHandler = manager()->watchHandler(); - if (incomplete.iname.startsWith(QLatin1String("watch."))) { + if (incomplete.iname.startsWith("watch.")) { WatchData watchData = incomplete; evaluateWatcher(&watchData); watchHandler->insertData(watchData); @@ -1311,7 +1311,7 @@ void CdbDebugEngine::assignValueInDebugger(const QString &expr, const QString &v break; // Update view WatchHandler *watchHandler = manager()->watchHandler(); - if (WatchData *fwd = watchHandler->findItem(expr)) { + if (WatchData *fwd = watchHandler->findItem(expr.toLatin1())) { fwd->setValue(newValue); watchHandler->insertData(*fwd); watchHandler->updateWatchers(); diff --git a/src/plugins/debugger/cdb/cdbstackframecontext.cpp b/src/plugins/debugger/cdb/cdbstackframecontext.cpp index f64f0366a1d..46e6aadefcb 100644 --- a/src/plugins/debugger/cdb/cdbstackframecontext.cpp +++ b/src/plugins/debugger/cdb/cdbstackframecontext.cpp @@ -230,7 +230,7 @@ bool WatchHandleDumperInserter::expandPointerToDumpable(const WatchData &wd, QSt derefedWd.setType(type); derefedWd.setAddress(hexAddrS); derefedWd.name = QString(QLatin1Char('*')); - derefedWd.iname = wd.iname + QLatin1String(".*"); + derefedWd.iname = wd.iname + ".*"; derefedWd.source = OwnerDumper | CdbStackFrameContext::ChildrenKnownBit; const CdbDumperHelper::DumpResult dr = m_dumper->dumpType(derefedWd, true, &m_dumperResult, errorMessage); if (dr != CdbDumperHelper::DumpOk) diff --git a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp index b37c8218890..4466cac0daf 100644 --- a/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp +++ b/src/plugins/debugger/cdb/cdbsymbolgroupcontext.cpp @@ -470,11 +470,11 @@ static inline QString fixValue(const QString &value, const QString &type) WatchData CdbSymbolGroupContext::watchDataAt(unsigned long index) const { WatchData wd; - wd.iname = symbolINameAt(index); + wd.iname = symbolINameAt(index).toLatin1(); wd.exp = wd.iname; // Determine name from iname and format shadowed variables correctly // as "<shadowed X>, see populateINameIndexMap(). - const int lastDelimiterPos = wd.iname.lastIndexOf(m_nameDelimiter); + const int lastDelimiterPos = wd.iname.lastIndexOf(m_nameDelimiter.toLatin1()); QString name = lastDelimiterPos == -1 ? wd.iname : wd.iname.mid(lastDelimiterPos + 1); int shadowedNumber = 0; const int shadowedPos = name.lastIndexOf(QLatin1Char(iNameShadowDelimiter)); @@ -486,7 +486,7 @@ WatchData CdbSymbolGroupContext::watchDataAt(unsigned long index) const // (std::map extends std::tree<>... Remove them for display only. const QString fullShadowedName = WatchData::shadowedName(name, shadowedNumber); wd.name = WatchData::shadowedName(removeInnerTemplateType(name), shadowedNumber); - wd.addr = hexSymbolOffset(m_symbolGroup, index); + wd.addr = hexSymbolOffset(m_symbolGroup, index).toLatin1(); const QString type = getSymbolString(m_symbolGroup, &IDebugSymbolGroup2::GetSymbolTypeNameWide, index); wd.setType(type); // Check for unitialized variables at level 0 only. diff --git a/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h b/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h index fe33e802b6c..0ae6be3353e 100644 --- a/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h +++ b/src/plugins/debugger/cdb/cdbsymbolgroupcontext_tpl.h @@ -137,7 +137,7 @@ bool insertSymbolRecursion(WatchData wd, return false; } else { const QString msg = QString::fromLatin1("WARNING: Skipping invalid child symbol #%2 (type %3) of '%4'."). - arg(QLatin1String(Q_FUNC_INFO)).arg(c).arg(cwd.type, wd.iname); + arg(QLatin1String(Q_FUNC_INFO)).arg(c).arg(cwd.type, QString::fromLatin1(wd.iname)); qWarning("%s\n", qPrintable(msg)); } } diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp index 2810ef23d97..d4f7c869f43 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.cpp +++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp @@ -70,7 +70,7 @@ void AttachGdbAdapter::startInferior() { QTC_ASSERT(state() == InferiorStarting, qDebug() << state()); const qint64 pid = startParameters().attachPID; - m_engine->postCommand(_("attach %1").arg(pid), CB(handleAttach)); + m_engine->postCommand("attach " + QByteArray::number(pid), CB(handleAttach)); // Task 254674 does not want to remove them //qq->breakHandler()->removeAllBreakpoints(); } diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp index e64abf9af31..9e2556649b2 100644 --- a/src/plugins/debugger/gdb/coregdbadapter.cpp +++ b/src/plugins/debugger/gdb/coregdbadapter.cpp @@ -97,8 +97,9 @@ void CoreGdbAdapter::loadExeAndSyms() { // Do that first, otherwise no symbols are loaded. QFileInfo fi(m_executable); - m_engine->postCommand(_("-file-exec-and-symbols \"%1\"") - .arg(fi.absoluteFilePath()), CB(handleFileExecAndSymbols)); + QByteArray path = fi.absoluteFilePath().toLocal8Bit(); + m_engine->postCommand("-file-exec-and-symbols \"" + path + '"', + CB(handleFileExecAndSymbols)); } void CoreGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response) @@ -118,8 +119,8 @@ void CoreGdbAdapter::loadCoreFile() { // Quoting core name below fails in gdb 6.8-debian. QFileInfo fi(startParameters().coreFile); - QString coreName = fi.absoluteFilePath(); - m_engine->postCommand(_("target core ") + coreName, CB(handleTargetCore)); + QByteArray coreName = fi.absoluteFilePath().toLocal8Bit(); + m_engine->postCommand("target core " + coreName, CB(handleTargetCore)); } void CoreGdbAdapter::handleTargetCore(const GdbResponse &response) @@ -144,7 +145,7 @@ void CoreGdbAdapter::handleTargetCore(const GdbResponse &response) if (QFile::exists(m_executable)) { // Finish extra round ... showStatusMessage(tr("Attached to core temporarily.")); - m_engine->postCommand(_("detach")); + m_engine->postCommand("detach"); // ... and retry. loadExeAndSyms(); return; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 93eaa08a7d7..9ee2f673109 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -139,6 +139,12 @@ static int ¤tToken() return token; } +static bool isAccessSpecifier(const QByteArray &ba) +{ + return ba == "private" || ba == "protected" || ba == "public"; +} + + // reads a MI-encoded item frome the consolestream static bool parseConsoleStream(const GdbResponse &response, GdbMi *contents) { @@ -688,13 +694,13 @@ void GdbEngine::maybeHandleInferiorPidChanged(const QString &pid0) tryLoadDebuggingHelpers(); } -void GdbEngine::postCommand(const QString &command, AdapterCallback callback, +void GdbEngine::postCommand(const QByteArray &command, AdapterCallback callback, const char *callbackName, const QVariant &cookie) { postCommand(command, NoFlags, callback, callbackName, cookie); } -void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags, +void GdbEngine::postCommand(const QByteArray &command, GdbCommandFlags flags, AdapterCallback callback, const char *callbackName, const QVariant &cookie) { @@ -707,13 +713,13 @@ void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags, postCommandHelper(cmd); } -void GdbEngine::postCommand(const QString &command, GdbCommandCallback callback, +void GdbEngine::postCommand(const QByteArray &command, GdbCommandCallback callback, const char *callbackName, const QVariant &cookie) { postCommand(command, NoFlags, callback, callbackName, cookie); } -void GdbEngine::postCommand(const QString &command, GdbCommandFlags flags, +void GdbEngine::postCommand(const QByteArray &command, GdbCommandFlags flags, GdbCommandCallback callback, const char *callbackName, const QVariant &cookie) { @@ -731,7 +737,7 @@ void GdbEngine::postCommandHelper(const GdbCommand &cmd) if (!stateAcceptsGdbCommands(state())) { PENDING_DEBUG(_("NO GDB PROCESS RUNNING, CMD IGNORED: ") + cmd.command); debugMessage(_("NO GDB PROCESS RUNNING, CMD IGNORED: %1 %2") - .arg(cmd.command).arg(state())); + .arg(_(cmd.command)).arg(state())); return; } @@ -751,7 +757,7 @@ void GdbEngine::postCommandHelper(const GdbCommand &cmd) flushCommand(cmd); } else { // Queue the commands that we cannot send at once. - debugMessage(_("QUEUING COMMAND ") + cmd.command); + debugMessage(_("QUEUING COMMAND " + cmd.command)); m_commandsToRunOnTemporaryBreak.append(cmd); if (state() == InferiorStopping) { if (cmd.flags & LosesChild) @@ -782,8 +788,8 @@ void GdbEngine::flushQueuedCommands() showStatusMessage(tr("Processing queued commands."), 1000); while (!m_commandsToRunOnTemporaryBreak.isEmpty()) { GdbCommand cmd = m_commandsToRunOnTemporaryBreak.takeFirst(); - debugMessage(_("RUNNING QUEUED COMMAND %1 %2") - .arg(cmd.command).arg(_(cmd.callbackName))); + debugMessage(_("RUNNING QUEUED COMMAND " + cmd.command + ' ' + + cmd.callbackName)); flushCommand(cmd); } } @@ -792,18 +798,18 @@ void GdbEngine::flushCommand(const GdbCommand &cmd0) { GdbCommand cmd = cmd0; if (state() == DebuggerNotReady) { - gdbInputAvailable(LogInput, cmd.command); - debugMessage(_("GDB PROCESS NOT RUNNING, PLAIN CMD IGNORED: ") + cmd.command); + gdbInputAvailable(LogInput, _(cmd.command)); + debugMessage(_("GDB PROCESS NOT RUNNING, PLAIN CMD IGNORED: " + cmd.command)); return; } ++currentToken(); cmd.postTime = QTime::currentTime(); m_cookieForToken[currentToken()] = cmd; - cmd.command = QString::number(currentToken()) + cmd.command; - gdbInputAvailable(LogInput, cmd.command); + cmd.command = QByteArray::number(currentToken()) + cmd.command; + gdbInputAvailable(LogInput, _(cmd.command)); - m_gdbAdapter->write(cmd.command.toLatin1() + "\r\n"); + m_gdbAdapter->write(cmd.command + "\r\n"); m_commandTimer->start(); @@ -827,7 +833,7 @@ void GdbEngine::commandTimeout() const GdbCommand &cmd = m_cookieForToken.value(key); if (!(cmd.flags & NonCriticalResponse)) killIt = true; - debugMessage(_(" %1: %2 => %3").arg(key).arg(cmd.command).arg(_(cmd.callbackName))); + debugMessage(_(" %1: %2 => %3").arg(key).arg(_(cmd.command)).arg(_(cmd.callbackName))); } if (killIt) { debugMessage(_("TIMED OUT WAITING FOR GDB REPLY. COMMANDS STILL IN PROGRESS:")); @@ -922,7 +928,7 @@ void GdbEngine::handleResultRecord(GdbResponse *response) GdbCommand cmd = m_cookieForToken.take(token); if (theDebuggerBoolSetting(LogTimeStamps)) { gdbOutputAvailable(LogTime, _("Response time: %1: %2 s") - .arg(cmd.command) + .arg(_(cmd.command)) .arg(cmd.postTime.msecsTo(QTime::currentTime()) / 1000.)); } @@ -937,9 +943,10 @@ void GdbEngine::handleResultRecord(GdbResponse *response) response->resultClass != ((cmd.flags & RunRequest) ? GdbResultRunning : (cmd.flags & ExitRequest) ? GdbResultExit : GdbResultDone)) { - QString rsp = _(GdbResponse::stringFromResultClass(response->resultClass)); - qWarning() << "UNEXPECTED RESPONSE " << rsp << " TO COMMAND" << cmd.command << " AT " __FILE__ ":" STRINGIFY(__LINE__); - debugMessage(_("UNEXPECTED RESPONSE %1 TO COMMAND %2").arg(rsp).arg(cmd.command)); + QByteArray rsp = GdbResponse::stringFromResultClass(response->resultClass); + rsp = "UNEXPECTED RESPONSE " + rsp + " TO COMMAND" + cmd.command; + qWarning() << rsp << " AT " __FILE__ ":" STRINGIFY(__LINE__); + debugMessage(_(rsp)); } else { if (cmd.callback) (this->*cmd.callback)(*response); @@ -1002,11 +1009,11 @@ void GdbEngine::updateAll() QTC_ASSERT(state() == InferiorUnrunnable || state() == InferiorStopped, /**/); tryLoadDebuggingHelpers(); reloadModulesInternal(); - postCommand(_("-stack-list-frames"), WatchUpdate, CB(handleStackListFrames), + postCommand("-stack-list-frames", WatchUpdate, CB(handleStackListFrames), QVariant::fromValue<StackCookie>(StackCookie(false, true))); manager()->stackHandler()->setCurrentIndex(0); if (supportsThreads()) - postCommand(_("-thread-list-ids"), WatchUpdate, CB(handleStackListThreads), 0); + postCommand("-thread-list-ids", WatchUpdate, CB(handleStackListThreads), 0); manager()->reloadRegisters(); updateLocals(); } @@ -1092,7 +1099,7 @@ void GdbEngine::handleAqcuiredInferior() { // Reverse debugging. FIXME: Should only be used when available. //if (theDebuggerBoolSetting(EnableReverseDebugging)) - // postCommand(_("target response")); + // postCommand("target response"); tryLoadDebuggingHelpers(); @@ -1100,19 +1107,19 @@ void GdbEngine::handleAqcuiredInferior() // intentionally after tryLoadDebuggingHelpers(), // otherwise we'd interupt solib loading. if (theDebuggerBoolSetting(AllPluginBreakpoints)) { - postCommand(_("set auto-solib-add on")); - postCommand(_("set stop-on-solib-events 0")); - postCommand(_("sharedlibrary .*")); + postCommand("set auto-solib-add on"); + postCommand("set stop-on-solib-events 0"); + postCommand("sharedlibrary .*"); } else if (theDebuggerBoolSetting(SelectedPluginBreakpoints)) { - postCommand(_("set auto-solib-add on")); - postCommand(_("set stop-on-solib-events 1")); - postCommand(_("sharedlibrary ") + postCommand("set auto-solib-add on"); + postCommand("set stop-on-solib-events 1"); + postCommand("sharedlibrary " + theDebuggerStringSetting(SelectedPluginBreakpointsPattern)); } else if (theDebuggerBoolSetting(NoPluginBreakpoints)) { // should be like that already if (!m_dumperInjectionLoad) - postCommand(_("set auto-solib-add off")); - postCommand(_("set stop-on-solib-events 0")); + postCommand("set auto-solib-add off"); + postCommand("set stop-on-solib-events 0"); } #endif @@ -1199,7 +1206,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data) invalidateSourcesList(); // Each stop causes a roundtrip and button flicker, so prevent // a flood of useless stops. Will be automatically re-enabled. - postCommand(_("set stop-on-solib-events 0")); + postCommand("set stop-on-solib-events 0"); #if 0 // The related code (handleAqcuiredInferior()) is disabled as well. if (theDebuggerBoolSetting(SelectedPluginBreakpoints)) { @@ -1207,7 +1214,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data) debugMessage(_("SHARED LIBRARY EVENT: ") + dataStr); QString pat = theDebuggerStringSetting(SelectedPluginBreakpointsPattern); debugMessage(_("PATTERN: ") + pat); - postCommand(_("sharedlibrary ") + pat); + postCommand("sharedlibrary " + pat.toLocal8Bit()); showStatusMessage(tr("Loading %1...").arg(dataStr)); } #endif @@ -1230,7 +1237,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data) // The case of the user really setting a breakpoint at _start is simply // unsupported. if (!inferiorPid()) // For programs without -pthread under gdb <= 6.8. - postCommand(_("info proc"), CB(handleInfoProc)); + postCommand("info proc", CB(handleInfoProc)); continueInferiorInternal(); return; } @@ -1300,7 +1307,7 @@ void GdbEngine::handleStopResponse(const GdbMi &data) if (initHelpers) { tryLoadDebuggingHelpers(); QVariant var = QVariant::fromValue<GdbMi>(data); - postCommand(_("p 4"), CB(handleStop1), var); // dummy + postCommand("p 4", CB(handleStop1), var); // dummy } else { handleStop1(data); } @@ -1381,7 +1388,7 @@ void GdbEngine::handleStop1(const GdbMi &data) if (supportsThreads()) { int currentId = data.findChild("thread-id").data().toInt(); - postCommand(_("-thread-list-ids"), WatchUpdate, + postCommand("-thread-list-ids", WatchUpdate, CB(handleStackListThreads), currentId); } @@ -1526,7 +1533,7 @@ void GdbEngine::shutdown() case AdapterStartFailed: // Adapter "did something", but it did not help if (m_gdbProc.state() == QProcess::Running) { m_commandsToRunOnTemporaryBreak.clear(); - postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit)); + postCommand("-gdb-exit", GdbEngine::ExitRequest, CB(handleGdbExit)); } else { setState(DebuggerNotReady); } @@ -1536,7 +1543,7 @@ void GdbEngine::shutdown() case InferiorStopping: case InferiorStopped: m_commandsToRunOnTemporaryBreak.clear(); - postCommand(_(m_gdbAdapter->inferiorShutdownCommand()), + postCommand(m_gdbAdapter->inferiorShutdownCommand(), NeedsStop | LosesChild, CB(handleInferiorShutdown)); break; case AdapterStarted: // We can't get here, really @@ -1545,7 +1552,7 @@ void GdbEngine::shutdown() case InferiorShutdownFailed: // Whatever case InferiorUnrunnable: m_commandsToRunOnTemporaryBreak.clear(); - postCommand(_("-gdb-exit"), GdbEngine::ExitRequest, CB(handleGdbExit)); + postCommand("-gdb-exit", GdbEngine::ExitRequest, CB(handleGdbExit)); setState(EngineShuttingDown); // Do it after posting the command! break; case InferiorStarting: // This may take some time, so just short-circuit it @@ -1592,7 +1599,7 @@ void GdbEngine::detachDebugger() { QTC_ASSERT(state() == InferiorStopped, /**/); QTC_ASSERT(startMode() != AttachCore, /**/); - postCommand(_("detach")); + postCommand("detach"); setState(InferiorShuttingDown); setState(InferiorShutDown); shutdown(); @@ -1683,7 +1690,7 @@ void GdbEngine::continueInferiorInternal() QTC_ASSERT(state() == InferiorStopped || state() == InferiorStarting, qDebug() << state()); setState(InferiorRunningRequested); - postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue)); + postCommand("-exec-continue", RunRequest, CB(handleExecContinue)); } void GdbEngine::autoContinueInferior() @@ -1707,9 +1714,9 @@ void GdbEngine::stepExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-step"), RunRequest, CB(handleExecContinue)); + postCommand("-reverse-step", RunRequest, CB(handleExecContinue)); else - postCommand(_("-exec-step"), RunRequest, CB(handleExecContinue)); + postCommand("-exec-step", RunRequest, CB(handleExecContinue)); } void GdbEngine::stepIExec() @@ -1719,9 +1726,9 @@ void GdbEngine::stepIExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step by instruction requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-stepi"), RunRequest, CB(handleExecContinue)); + postCommand("-reverse-stepi", RunRequest, CB(handleExecContinue)); else - postCommand(_("-exec-step-instruction"), RunRequest, CB(handleExecContinue)); + postCommand("-exec-step-instruction", RunRequest, CB(handleExecContinue)); } void GdbEngine::stepOutExec() @@ -1730,7 +1737,7 @@ void GdbEngine::stepOutExec() setTokenBarrier(); setState(InferiorRunningRequested); showStatusMessage(tr("Finish function requested..."), 5000); - postCommand(_("-exec-finish"), RunRequest, CB(handleExecContinue)); + postCommand("-exec-finish", RunRequest, CB(handleExecContinue)); } void GdbEngine::nextExec() @@ -1740,15 +1747,9 @@ void GdbEngine::nextExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step next requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-next"), RunRequest, CB(handleExecContinue)); - else { -#if 1 - postCommand(_("-exec-next"), RunRequest, CB(handleExecContinue)); -#else - postCommand(_("tbreak \"%2\":%1").arg(lastLine + 1).arg(breakLocation(lastFile))); - postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue)); -#endif - } + postCommand("-reverse-next", RunRequest, CB(handleExecContinue)); + else + postCommand("-exec-next", RunRequest, CB(handleExecContinue)); } void GdbEngine::nextIExec() @@ -1758,9 +1759,9 @@ void GdbEngine::nextIExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step next instruction requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-nexti"), RunRequest, CB(handleExecContinue)); + postCommand("-reverse-nexti", RunRequest, CB(handleExecContinue)); else - postCommand(_("-exec-next-instruction"), RunRequest, CB(handleExecContinue)); + postCommand("-exec-next-instruction", RunRequest, CB(handleExecContinue)); } void GdbEngine::runToLineExec(const QString &fileName, int lineNumber) @@ -1769,18 +1770,19 @@ void GdbEngine::runToLineExec(const QString &fileName, int lineNumber) setTokenBarrier(); setState(InferiorRunningRequested); showStatusMessage(tr("Run to line %1 requested...").arg(lineNumber), 5000); - postCommand(_("-exec-until \"%2\":%1").arg(lineNumber).arg(breakLocation(fileName)), - RunRequest, CB(handleExecContinue)); + QByteArray args = '"' + breakLocation(fileName).toLocal8Bit() + '"' + ':' + + QByteArray::number(lineNumber); + postCommand("-exec-until " + args, RunRequest, CB(handleExecContinue)); } void GdbEngine::runToFunctionExec(const QString &functionName) { QTC_ASSERT(state() == InferiorStopped, qDebug() << state()); setTokenBarrier(); - postCommand(_("-break-insert -t ") + functionName); + postCommand("-break-insert -t " + functionName.toLatin1()); continueInferiorInternal(); //setState(InferiorRunningRequested); - //postCommand(_("-exec-continue"), handleExecRunToFunction); + //postCommand("-exec-continue", handleExecRunToFunction); showStatusMessage(tr("Run to function %1 requested...").arg(functionName), 5000); } @@ -1791,10 +1793,11 @@ void GdbEngine::jumpToLineExec(const QString &fileName, int lineNumber) frame.file = fileName; frame.line = lineNumber; #if 1 - QString loc = breakLocation(fileName); - postCommand(_("tbreak \"%2\":%1").arg(lineNumber).arg(loc)); + QByteArray loc = '"' + breakLocation(fileName).toLocal8Bit() + '"' + ':' + + QByteArray::number(lineNumber); + postCommand("tbreak " + loc); setState(InferiorRunningRequested); - postCommand(_("jump \"%2\":%1").arg(lineNumber).arg(loc), RunRequest); + postCommand("jump " + loc, RunRequest); // will produce something like // &"jump \"/home/apoenitz/dev/work/test1/test1.cpp\":242" // ~"Continuing at 0x4058f3." @@ -1803,12 +1806,12 @@ void GdbEngine::jumpToLineExec(const QString &fileName, int lineNumber) // 23^done" gotoLocation(frame, true); //setBreakpoint(); - //postCommand(_("jump ") + fileName + ':' + QString::number(lineNumber)); + //postCommand("jump " + loc); #else gotoLocation(frame, true); setBreakpoint(fileName, lineNumber); setState(InferiorRunningRequested); - postCommand(_("jump ") + fileName + ':' + QString::number(lineNumber), RunRequest); + postCommand("jump " + loc, RunRequest); #endif } @@ -1839,12 +1842,12 @@ void GdbEngine::setDebugDebuggingHelpers(const QVariant &on) { if (on.toBool()) { debugMessage(_("SWITCHING ON DUMPER DEBUGGING")); - postCommand(_("set unwindonsignal off")); + postCommand("set unwindonsignal off"); m_manager->breakByFunction(_("qDumpObjectData440")); //updateLocals(); } else { debugMessage(_("SWITCHING OFF DUMPER DEBUGGING")); - postCommand(_("set unwindonsignal on")); + postCommand("set unwindonsignal on"); } } @@ -1868,7 +1871,7 @@ void GdbEngine::breakpointDataFromOutput(BreakpointData *data, const GdbMi &bkpt QByteArray file, fullName; foreach (const GdbMi &child, bkpt.children()) { if (child.hasName("number")) { - data->bpNumber = _(child.data()); + data->bpNumber = child.data(); } else if (child.hasName("func")) { data->bpFuncName = _(child.data()); } else if (child.hasName("addr")) { @@ -1883,11 +1886,11 @@ void GdbEngine::breakpointDataFromOutput(BreakpointData *data, const GdbMi &bkpt } else if (child.hasName("fullname")) { fullName = child.data(); } else if (child.hasName("line")) { - data->bpLineNumber = _(child.data()); + data->bpLineNumber = child.data(); if (child.data().toInt()) data->markerLineNumber = child.data().toInt(); } else if (child.hasName("cond")) { - data->bpCondition = _(child.data()); + data->bpCondition = child.data(); // gdb 6.3 likes to "rewrite" conditions. Just accept that fact. if (data->bpCondition != data->condition && data->conditionsMatch()) data->condition = data->bpCondition; @@ -1936,27 +1939,28 @@ QString GdbEngine::breakLocation(const QString &file) const void GdbEngine::sendInsertBreakpoint(int index) { const BreakpointData *data = manager()->breakHandler()->at(index); - QString where; + QByteArray where; if (data->funcName.isEmpty()) { - where = data->useFullPath ? data->fileName : breakLocation(data->fileName); + QString loc = data->useFullPath ? data->fileName : breakLocation(data->fileName); // The argument is simply a C-quoted version of the argument to the // non-MI "break" command, including the "original" quoting it wants. - where = _("\"\\\"%2\\\":%1\"").arg(data->lineNumber).arg(GdbMi::escapeCString(where)); + where = "\"\\\"" + GdbMi::escapeCString(loc).toLocal8Bit() + "\\\":" + + data->lineNumber + '"'; } else { - where = data->funcName; + where = data->funcName.toLatin1(); } // set up fallback in case of pending breakpoints which aren't handled // by the MI interface - QString cmd; + QByteArray cmd; if (m_isMacGdb) - cmd = _("-break-insert -l -1 -f "); + cmd = "-break-insert -l -1 -f "; else if (m_gdbVersion >= 60800) // Probably some earlier version would work as well ... - cmd = _("-break-insert -f "); + cmd = "-break-insert -f "; else - cmd = _("-break-insert "); + cmd = "-break-insert "; //if (!data->condition.isEmpty()) - // cmd += _("-c ") + data->condition + _c(' '); + // cmd += "-c " + data->condition + ' '; cmd += where; postCommand(cmd, NeedsStop, CB(handleBreakInsert), index); } @@ -1964,7 +1968,7 @@ void GdbEngine::sendInsertBreakpoint(int index) void GdbEngine::reloadBreakListInternal() { m_breakListUpdating = true; - postCommand(_("-break-list"), NeedsStop, CB(handleBreakList)); + postCommand("-break-list", NeedsStop, CB(handleBreakList)); } void GdbEngine::handleBreakList(const GdbResponse &response) @@ -2119,7 +2123,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData * if (re.indexIn(output) != -1) { data->bpAddress = re.cap(1); data->bpFuncName = re.cap(2).trimmed(); - data->bpLineNumber = re.cap(4); + data->bpLineNumber = re.cap(4).toLatin1(); QString full = fullName(re.cap(3)); if (full.isEmpty()) { // FIXME: This happens without UsePreciseBreakpoints regularily. @@ -2137,7 +2141,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointData * data->bpFileName = full; } else { qDebug() << "COULD NOT MATCH " << re.pattern() << " AND " << output; - data->bpNumber = _("<unavailable>"); + data->bpNumber = "<unavailable>"; } } @@ -2169,7 +2173,7 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response) } else { qDebug() << "INSERTING BREAKPOINT WITH BASE NAME FAILED. GIVING UP"; BreakpointData *data = handler->at(index); - data->bpNumber = _("<unavailable>"); + data->bpNumber = "<unavailable>"; } attemptBreakpointSynchronization(); // trigger "ready" } @@ -2208,51 +2212,51 @@ void GdbEngine::attemptBreakpointSynchronization() BreakHandler *handler = manager()->breakHandler(); foreach (BreakpointData *data, handler->takeDisabledBreakpoints()) { - QString bpNumber = data->bpNumber; + QByteArray bpNumber = data->bpNumber; if (!bpNumber.trimmed().isEmpty()) { - postCommand(_("-break-disable ") + bpNumber, NeedsStop); + postCommand("-break-disable " + bpNumber, NeedsStop); data->bpEnabled = false; } } foreach (BreakpointData *data, handler->takeEnabledBreakpoints()) { - QString bpNumber = data->bpNumber; + QByteArray bpNumber = data->bpNumber; if (!bpNumber.trimmed().isEmpty()) { - postCommand(_("-break-enable ") + bpNumber, NeedsStop); + postCommand("-break-enable " + bpNumber, NeedsStop); data->bpEnabled = true; } } foreach (BreakpointData *data, handler->takeRemovedBreakpoints()) { - QString bpNumber = data->bpNumber; - debugMessage(_("DELETING BP %1 IN %2").arg(bpNumber) - .arg(data->markerFileName)); + QByteArray bpNumber = data->bpNumber; + debugMessage(_("DELETING BP " + bpNumber + " IN " + + data->markerFileName.toLocal8Bit())); if (!bpNumber.trimmed().isEmpty()) - postCommand(_("-break-delete ") + bpNumber, NeedsStop); + postCommand("-break-delete " + bpNumber, NeedsStop); delete data; } for (int index = 0; index != handler->size(); ++index) { BreakpointData *data = handler->at(index); if (data->bpNumber.isEmpty()) { // unset breakpoint? - data->bpNumber = _(" "); // Sent, but no feedback yet + data->bpNumber = " "; // Sent, but no feedback yet sendInsertBreakpoint(index); } else if (data->bpNumber.toInt()) { if (data->bpMultiple && data->bpFileName.isEmpty()) { - postCommand(_("info break %1").arg(data->bpNumber), + postCommand("info break " + data->bpNumber, CB(handleBreakInfo), data->bpNumber.toInt()); continue; } // update conditions if needed if (data->condition != data->bpCondition && !data->conditionsMatch()) - postCommand(_("condition %1 %2").arg(data->bpNumber).arg(data->condition), + postCommand("condition " + data->bpNumber + ' ' + data->condition, CB(handleBreakCondition), index); // update ignorecount if needed if (data->ignoreCount != data->bpIgnoreCount) - postCommand(_("ignore %1 %2").arg(data->bpNumber).arg(data->ignoreCount), + postCommand("ignore " + data->bpNumber + ' ' + data->ignoreCount, CB(handleBreakIgnore), index); if (!data->enabled && data->bpEnabled) { - postCommand(_("-break-disable ") + data->bpNumber, NeedsStop); + postCommand("-break-disable " + data->bpNumber, NeedsStop); data->bpEnabled = false; } } @@ -2271,13 +2275,13 @@ void GdbEngine::attemptBreakpointSynchronization() void GdbEngine::loadSymbols(const QString &moduleName) { // FIXME: gdb does not understand quoted names here (tested with 6.8) - postCommand(_("sharedlibrary ") + dotEscape(moduleName)); + postCommand("sharedlibrary " + dotEscape(moduleName.toLocal8Bit())); reloadModulesInternal(); } void GdbEngine::loadAllSymbols() { - postCommand(_("sharedlibrary .*")); + postCommand("sharedlibrary .*"); reloadModulesInternal(); } @@ -2324,10 +2328,10 @@ void GdbEngine::reloadModules() void GdbEngine::reloadModulesInternal() { m_modulesListOutdated = false; - postCommand(_("info shared"), NeedsStop, CB(handleModulesList)); + postCommand("info shared", NeedsStop, CB(handleModulesList)); #if 0 if (m_gdbVersion < 70000 && !m_isMacGdb) - postCommand(_("set stop-on-solib-events 1")); + postCommand("set stop-on-solib-events 1"); #endif } @@ -2402,10 +2406,10 @@ void GdbEngine::reloadSourceFilesInternal() { QTC_ASSERT(!m_sourcesListUpdating, /**/); m_sourcesListUpdating = true; - postCommand(_("-file-list-exec-source-files"), NeedsStop, CB(handleQuerySources)); + postCommand("-file-list-exec-source-files", NeedsStop, CB(handleQuerySources)); #if 0 if (m_gdbVersion < 70000 && !m_isMacGdb) - postCommand(_("set stop-on-solib-events 1")); + postCommand("set stop-on-solib-events 1"); #endif } @@ -2425,7 +2429,7 @@ void GdbEngine::selectThread(int index) QTC_ASSERT(index < threads.size(), return); int id = threads.at(index).id; showStatusMessage(tr("Retrieving data for stack view..."), 10000); - postCommand(_("-thread-select %1").arg(id), CB(handleStackSelectThread)); + postCommand("-thread-select " + QByteArray::number(id), CB(handleStackSelectThread)); } void GdbEngine::handleStackSelectThread(const GdbResponse &) @@ -2440,17 +2444,16 @@ void GdbEngine::handleStackSelectThread(const GdbResponse &) void GdbEngine::reloadFullStack() { - QString cmd = _("-stack-list-frames"); - postCommand(cmd, WatchUpdate, CB(handleStackListFrames), + postCommand("-stack-list-frames", WatchUpdate, CB(handleStackListFrames), QVariant::fromValue<StackCookie>(StackCookie(true, true))); } void GdbEngine::reloadStack(bool forceGotoLocation) { - QString cmd = _("-stack-list-frames"); + QByteArray cmd = "-stack-list-frames"; int stackDepth = theDebuggerAction(MaximalStackDepth)->value().toInt(); if (stackDepth && !m_gdbAdapter->isTrkAdapter()) - cmd += _(" 0 ") + QString::number(stackDepth); + cmd += " 0 " + QByteArray::number(stackDepth); // FIXME: gdb 6.4 symbianelf likes to be asked twice. The first time it // returns with "^error,msg="Previous frame identical to this frame // (corrupt stack?)". Might be related to the fact that we can't @@ -2519,7 +2522,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response) if (targetFrame == -1 && isBogus) { setTokenBarrier(); setState(InferiorRunningRequested); - postCommand(_("-exec-finish"), RunRequest, CB(handleExecContinue)); + postCommand("-exec-finish", RunRequest, CB(handleExecContinue)); showStatusMessage(tr("Jumping out of bogus frame..."), 1000); return; } @@ -2588,7 +2591,7 @@ void GdbEngine::activateFrame(int frameIndex) // Assuming the command always succeeds this saves a roundtrip. // Otherwise the lines below would need to get triggered // after a response to this -stack-select-frame here. - postCommand(_("-stack-select-frame ") + QString::number(frameIndex)); + postCommand("-stack-select-frame " + QByteArray::number(frameIndex)); stackHandler->setCurrentIndex(frameIndex); updateLocals(); @@ -2632,18 +2635,18 @@ void GdbEngine::reloadRegisters() if (state() != InferiorStopped) return; if (!m_registerNamesListed) { - postCommand(_("-data-list-register-names"), CB(handleRegisterListNames)); + postCommand("-data-list-register-names", CB(handleRegisterListNames)); m_registerNamesListed = true; } if (m_gdbAdapter->isTrkAdapter()) { // FIXME: remove that special case. This is only to prevent // gdb from asking for the values of the fixed point registers - postCommand(_("-data-list-register-values x 0 1 2 3 4 5 6 7 8 9 " - "10 11 12 13 14 15 25"), + postCommand("-data-list-register-values x 0 1 2 3 4 5 6 7 8 9 " + "10 11 12 13 14 15 25", Discardable, CB(handleRegisterListValues)); } else { - postCommand(_("-data-list-register-values x"), + postCommand("-data-list-register-values x", Discardable, CB(handleRegisterListValues)); } } @@ -2653,11 +2656,11 @@ void GdbEngine::setRegisterValue(int nr, const QString &value) Register reg = manager()->registerHandler()->registers().at(nr); //qDebug() << "NOT IMPLEMENTED: CHANGE REGISTER " << nr << reg.name << ":" // << value; - postCommand(_("-var-delete \"R@\"")); - postCommand(_("-var-create \"R@\" * $%1").arg(reg.name)); - postCommand(_("-var-assign \"R@\" %1").arg(value)); - postCommand(_("-var-delete \"R@\"")); - //postCommand(_("-data-list-register-values d"), + postCommand("-var-delete \"R@\""); + postCommand("-var-create \"R@\" * $" + reg.name); + postCommand("-var-assign \"R@\" " + value.toLatin1()); + postCommand("-var-delete \"R@\""); + //postCommand("-data-list-register-values d", // Discardable, CB(handleRegisterListValues)); reloadRegisters(); } @@ -2671,7 +2674,7 @@ void GdbEngine::handleRegisterListNames(const GdbResponse &response) QList<Register> registers; foreach (const GdbMi &item, response.data.findChild("register-names").children()) - registers.append(Register(_(item.data()))); + registers.append(Register(item.data())); manager()->registerHandler()->setRegisters(registers); } @@ -2721,19 +2724,19 @@ bool GdbEngine::supportsThreads() const static QString m_toolTipExpression; static QPoint m_toolTipPos; -static QString tooltipINameForExpression(const QString &exp) +static QByteArray tooltipINameForExpression(const QByteArray &exp) { // FIXME: 'exp' can contain illegal characters - //return QLatin1String("tooltip.") + exp; + //return "tooltip." + exp; Q_UNUSED(exp) - return QLatin1String("tooltip.x"); + return "tooltip.x"; } bool GdbEngine::showToolTip() { WatchHandler *handler = manager()->watchHandler(); WatchModel *model = handler->model(TooltipsWatch); - QString iname = tooltipINameForExpression(m_toolTipExpression); + QByteArray iname = tooltipINameForExpression(m_toolTipExpression.toLatin1()); WatchItem *item = model->findItem(iname, model->rootItem()); if (!item) { hideDebuggerToolTip(); @@ -2819,9 +2822,9 @@ void GdbEngine::setToolTipExpression(const QPoint &mousePos, */ WatchData toolTip; - toolTip.exp = exp; + toolTip.exp = exp.toLatin1(); toolTip.name = exp; - toolTip.iname = tooltipINameForExpression(exp); + toolTip.iname = tooltipINameForExpression(toolTip.exp); manager()->watchHandler()->removeData(toolTip.iname); manager()->watchHandler()->insertData(toolTip); } @@ -2880,22 +2883,22 @@ static void setWatchDataValueEditable(WatchData &data, const GdbMi &mi) static void setWatchDataExpression(WatchData &data, const GdbMi &mi) { if (mi.isValid()) - data.exp = _(mi.data()); + data.exp = mi.data(); } static void setWatchDataAddress(WatchData &data, const GdbMi &mi) { if (mi.isValid()) { - data.addr = _(mi.data()); - if (data.exp.isEmpty() && !data.addr.startsWith(_("$"))) - data.exp = _("*(") + gdbQuoteTypes(data.type) + _("*)") + data.addr; + data.addr = mi.data(); + if (data.exp.isEmpty() && !data.addr.startsWith("$")) + data.exp = "*(" + gdbQuoteTypes(data.type).toLatin1() + "*)" + data.addr; } } static void setWatchDataSAddress(WatchData &data, const GdbMi &mi) { if (mi.isValid()) - data.saddr = _(mi.data()); + data.saddr = mi.data(); } void GdbEngine::setUseDebuggingHelpers(const QVariant &on) @@ -2943,13 +2946,13 @@ static inline QString msgRetrievingWatchData(int pending) void GdbEngine::runDirectDebuggingHelper(const WatchData &data, bool dumpChildren) { Q_UNUSED(dumpChildren) - QString type = data.type; - QString cmd; + QByteArray type = data.type.toLatin1(); + QByteArray cmd; - if (type == __("QString") || type.endsWith(__("::QString"))) - cmd = _("qdumpqstring (&(") + data.exp + _("))"); - else if (type == __("QStringList") || type.endsWith(__("::QStringList"))) - cmd = _("qdumpqstringlist (&(") + data.exp + _("))"); + if (type == "QString" || type.endsWith("::QString")) + cmd = "qdumpqstring (&(" + data.exp + "))"; + else if (type == "QStringList" || type.endsWith("::QStringList")) + cmd = "qdumpqstringlist (&(" + data.exp + "))"; QVariant var; var.setValue(data); @@ -2967,10 +2970,10 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren) WatchData data = data0; // Avoid endless loops created by faulty dumpers. - QString processedName = QString(_("%1-%2").arg(dumpChildren).arg(data.iname)); + QByteArray processedName = QByteArray::number(dumpChildren) + '-' + data.iname; if (m_processedNames.contains(processedName)) { gdbInputAvailable(LogStatus, - _("<Breaking endless loop for %1>").arg(data.iname)); + _("<Breaking endless loop for " + data.iname + ">")); data.setAllUnneeded(); data.setValue(_("<unavailable>")); data.setHasChildren(false); @@ -2989,13 +2992,13 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren) const int protocol = 2; //int protocol = isDisplayedIName(data.iname) ? 3 : 2; - QString addr; - if (data.addr.startsWith(__("0x"))) - addr = _("(void*)") + data.addr; + QByteArray addr; + if (data.addr.startsWith("0x")) + addr = "(void*)" + data.addr; else if (data.exp.isEmpty()) // happens e.g. for QAbstractItem - addr = _("0"); + addr = "0"; else - addr = _("&(") + data.exp + _c(')'); + addr = "&(" + data.exp + ')'; sendWatchParameters(params); @@ -3004,27 +3007,27 @@ void GdbEngine::runDebuggingHelper(const WatchData &data0, bool dumpChildren) protocol << ",0," << addr << ',' << (dumpChildren ? "1" : "0") << ',' << extraArgs.join(QString(_c(','))) << ')'; - postCommand(cmd, WatchUpdate | NonCriticalResponse); + postCommand(cmd.toLatin1(), WatchUpdate | NonCriticalResponse); showStatusMessage(msgRetrievingWatchData(m_pendingRequests + 1), 10000); // retrieve response - postCommand(_("p (char*)&qDumpOutBuffer"), WatchUpdate, + postCommand("p (char*)&qDumpOutBuffer", WatchUpdate, CB(handleDebuggingHelperValue2), qVariantFromValue(data)); } void GdbEngine::createGdbVariable(const WatchData &data) { - if (data.iname == _("local.flist.0")) { + if (data.iname == "local.flist.0") { int i = 1; Q_UNUSED(i); } - postCommand(_("-var-delete \"%1\"").arg(data.iname), WatchUpdate); - QString exp = data.exp; - if (exp.isEmpty() && data.addr.startsWith(__("0x"))) - exp = _("*(") + gdbQuoteTypes(data.type) + _("*)") + data.addr; + postCommand("-var-delete \"" + data.iname + '"', WatchUpdate); + QByteArray exp = data.exp; + if (exp.isEmpty() && data.addr.startsWith("0x")) + exp = "*(" + gdbQuoteTypes(data.type).toLatin1() + "*)" + data.addr; QVariant val = QVariant::fromValue<WatchData>(data); - postCommand(_("-var-create \"%1\" * \"%2\"").arg(data.iname).arg(exp), + postCommand("-var-create \"" + data.iname + "\" * \"" + exp + '"', WatchUpdate, CB(handleVarCreate), val); } @@ -3074,16 +3077,16 @@ void GdbEngine::updateSubItem(const WatchData &data0) if (theDebuggerBoolSetting(AutoDerefPointers)) { // Try automatic dereferentiation - data.exp = _("(*(") + data.exp + _("))"); + data.exp = "(*(" + data.exp + "))"; data.type = data.type + _("."); // FIXME: fragile HACK to avoid recursion insertData(data); } else { data.setChildrenUnneeded(); insertData(data); WatchData data1; - data1.iname = data.iname + QLatin1String(".*"); + data1.iname = data.iname + ".*"; data1.name = QLatin1Char('*') + data.name; - data1.exp = QLatin1String("(*(") + data.exp + QLatin1String("))"); + data1.exp = "(*(" + data.exp + "))"; data1.type = stripPointerType(data.type); data1.setValueNeeded(); data1.setChildrenUnneeded(); @@ -3126,7 +3129,7 @@ void GdbEngine::updateSubItem(const WatchData &data0) #if DEBUG_SUBITEM qDebug() << "UPDATE SUBITEM: VALUE"; #endif - QString cmd = _("-var-evaluate-expression \"") + data.iname + _c('"'); + QByteArray cmd = "-var-evaluate-expression \"" + data.iname + '"'; postCommand(cmd, WatchUpdate, CB(handleEvaluateExpression), QVariant::fromValue(data)); return; @@ -3152,7 +3155,7 @@ void GdbEngine::updateSubItem(const WatchData &data0) if (data.isChildrenNeeded()) { QTC_ASSERT(!data.variable.isEmpty(), return); // tested above - QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"'); + QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"'; postCommand(cmd, WatchUpdate, CB(handleVarListChildren), QVariant::fromValue(data)); return; } @@ -3179,7 +3182,7 @@ void GdbEngine::updateSubItem(const WatchData &data0) if (data.isHasChildrenNeeded()) { QTC_ASSERT(!data.variable.isEmpty(), return); // tested above - QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"'); + QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"'; postCommand(cmd, Discardable, CB(handleVarListChildren), QVariant::fromValue(data)); return; @@ -3201,16 +3204,16 @@ void GdbEngine::updateWatchData(const WatchData &data) insertData(data1); rebuildModel(); #else - if (data.iname.endsWith(_("."))) + if (data.iname.endsWith(".")) return; // Avoid endless loops created by faulty dumpers. - QString processedName = QString(_("%1-%2").arg(1).arg(data.iname)); + QByteArray processedName = "1-" + data.iname; //qDebug() << "PROCESSED NAMES: " << processedName << m_processedNames; if (m_processedNames.contains(processedName)) { WatchData data1 = data; gdbInputAvailable(LogStatus, - _("<Breaking endless loop for %1>").arg(data1.iname)); + _("<Breaking endless loop for " + data.iname + '>')); data1.setAllUnneeded(); data1.setValue(_("<unavailable>")); data1.setHasChildren(false); @@ -3310,7 +3313,7 @@ void GdbEngine::handleQueryDebuggingHelper(const GdbResponse &response) //qDebug() << m_availableSimpleDebuggingHelpers << "DATA DUMPERS AVAILABLE"; } -static inline QString arrayFillCommand(const char *array, const QByteArray ¶ms) +static inline QByteArray arrayFillCommand(const char *array, const QByteArray ¶ms) { char buf[50]; sprintf(buf, "set {char[%d]} &%s = {", params.size(), array); @@ -3322,21 +3325,21 @@ static inline QString arrayFillCommand(const char *array, const QByteArray ¶ encoded.append(buf); } encoded[encoded.size() - 1] = '}'; - return _(encoded); + return encoded; } void GdbEngine::sendWatchParameters(const QByteArray ¶ms0) { QByteArray params = params0; params.append('\0'); - const QString inBufferCmd = arrayFillCommand("qDumpInBuffer", params); + const QByteArray inBufferCmd = arrayFillCommand("qDumpInBuffer", params); params.replace('\0','!'); gdbInputAvailable(LogMisc, QString::fromUtf8(params)); params.clear(); params.append('\0'); - const QString outBufferCmd = arrayFillCommand("qDumpOutBuffer", params); + const QByteArray outBufferCmd = arrayFillCommand("qDumpOutBuffer", params); postCommand(inBufferCmd); postCommand(outBufferCmd); @@ -3507,9 +3510,9 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item, data1.name = QString::number(i); GdbMi iname = child.findChild("iname"); if (iname.isValid()) - data1.iname = _(iname.data()); + data1.iname = iname.data(); else - data1.iname = data.iname + _c('.') + data1.name; + data1.iname = data.iname + '.' + data1.name.toLatin1(); if (!data1.name.isEmpty() && data1.name.at(0).isDigit()) data1.name = _c('[') + data1.name + _c(']'); QByteArray key = child.findChild("key").data(); @@ -3572,12 +3575,12 @@ void GdbEngine::handleDebuggingHelperValue3(const GdbResponse &response) 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.iname = data.iname + '.' + QByteArray::number(i); + data1.addr = list.at(i); + data1.exp = "((" + gdbQuoteTypes(data1.type).toLatin1() + "*)" + data1.addr + ")"; data1.setHasChildren(false); data1.setValueNeeded(); - QString cmd = _("qdumpqstring (") + data1.exp + _c(')'); + QByteArray cmd = "qdumpqstring (" + data1.exp + ')'; QVariant var; var.setValue(data1); postCommand(cmd, WatchUpdate, CB(handleDebuggingHelperValue3), var); @@ -3605,34 +3608,42 @@ void GdbEngine::updateLocals(const QVariant &cookie) manager()->watchHandler()->beginCycle(); m_toolTipExpression.clear(); WatchHandler *handler = m_manager->watchHandler(); - QStringList expanded = handler->expandedINames().toList(); - expanded.append(_("defaults")); - QString watchers; - QHash<QString, int> watcherNames = handler->watcherNames(); - QHashIterator<QString, int> it(watcherNames); + + QByteArray expanded; + QSet<QByteArray> expandedINames = handler->expandedINames(); + QSetIterator<QByteArray> jt(expandedINames); + while (jt.hasNext()) { + expanded.append(jt.next()); + expanded.append(','); + } + if (expanded.isEmpty()) + expanded.append("defaults,"); + expanded.chop(1); + + QByteArray watchers; + QHash<QByteArray, int> watcherNames = handler->watcherNames(); + QHashIterator<QByteArray, int> it(watcherNames); while (it.hasNext()) { it.next(); if (!watchers.isEmpty()) - watchers += _("$$"); - if (it.key() == WatchHandler::watcherEditPlaceHolder()) - watchers += _("<Edit>$%1").arg(it.value()); + watchers += "$$"; + if (it.key() == WatchHandler::watcherEditPlaceHolder().toLatin1()) + watchers += "<Edit>$" + QByteArray::number(it.value()); else - watchers += _("%1$%2").arg(it.key()).arg(it.value()); + watchers += it.key() + '$' + QByteArray::number(it.value()); } - QString options; + QByteArray options; if (theDebuggerBoolSetting(UseDebuggingHelpers)) - options += _("fancy,"); + options += "fancy,"; if (theDebuggerBoolSetting(AutoDerefPointers)) - options += _("autoderef,"); + options += "autoderef,"; if (options.isEmpty()) - options += _("defaults,"); + options += "defaults,"; options.chop(1); - postCommand(_("-interpreter-exec console \"bb %1 %2 %3\"") - .arg(options) - .arg(expanded.join(_(","))) - .arg(_(watchers.toLatin1().toHex())), + postCommand("-interpreter-exec console \"bb " + + options + ' ' + expanded + ' ' + watchers.toHex() + '"', Discardable, CB(handleStackFrame)); } else { @@ -3649,12 +3660,12 @@ void GdbEngine::updateLocals(const QVariant &cookie) && inferiorPid() > 0) tryQueryDebuggingHelpers(); - QString level = QString::number(currentFrame()); + QByteArray level = QByteArray::number(currentFrame()); // '2' is 'list with type and value' - QString cmd = _("-stack-list-arguments 2 ") + level + _c(' ') + level; + QByteArray cmd = "-stack-list-arguments 2 " + level + ' ' + level; postCommand(cmd, WatchUpdate, CB(handleStackListArguments)); // '2' is 'list with type and value' - postCommand(_("-stack-list-locals 2"), WatchUpdate, + postCommand("-stack-list-locals 2", WatchUpdate, CB(handleStackListLocals), cookie); // stage 2/2 } } @@ -3676,7 +3687,7 @@ void GdbEngine::handleStackFrame(const GdbResponse &response) all.fromStringMultiple(out); GdbMi locals = all.findChild("locals"); - WatchData *data = manager()->watchHandler()->findItem(_("local")); + WatchData *data = manager()->watchHandler()->findItem("local"); QTC_ASSERT(data, return); QList<WatchData> list; handleChildren(*data, locals, &list); @@ -3685,7 +3696,7 @@ void GdbEngine::handleStackFrame(const GdbResponse &response) manager()->watchHandler()->insertBulkData(list); GdbMi watchers = all.findChild("watchers"); - data = manager()->watchHandler()->findItem(_("watch")); + data = manager()->watchHandler()->findItem("watch"); QTC_ASSERT(data, return); list.clear(); handleChildren(*data, watchers, &list); @@ -3801,7 +3812,7 @@ WatchData GdbEngine::localVariable(const GdbMi &item, ++(it.value()); WatchData data; QString nam = _(name); - data.iname = _("local.") + nam + QString::number(n + 1); + data.iname = "local." + name + QByteArray::number(n + 1); //: Variable %1 is the variable name, %2 is a simple count data.name = WatchData::shadowedName(nam, n); if (uninitializedVariables.contains(data.name)) { @@ -3818,9 +3829,9 @@ WatchData GdbEngine::localVariable(const GdbMi &item, seen->insert(name, 1); WatchData data; QString nam = _(name); - data.iname = _("local.") + nam; + data.iname = "local." + name; data.name = nam; - data.exp = nam; + data.exp = name; data.framekey = m_currentFrame + data.name; setWatchDataType(data, item.findChild("type")); if (uninitializedVariables.contains(data.name)) { @@ -3869,10 +3880,10 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, //qDebug() << "VAR_LIST_CHILDREN: ITEM" << item.toString(); QByteArray exp = item.findChild("exp").data(); QByteArray name = item.findChild("name").data(); - if (isAccessSpecifier(_(exp))) { + if (isAccessSpecifier(exp)) { // suppress 'private'/'protected'/'public' level WatchData data; - data.variable = _(name); + data.variable = name; data.iname = parent.iname; //data.iname = data.variable; data.exp = parent.exp; @@ -3881,7 +3892,7 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, data.setHasChildrenUnneeded(); data.setChildrenUnneeded(); //qDebug() << "DATA" << data.toString(); - QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"'); + QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"'; //iname += '.' + exp; postCommand(cmd, WatchUpdate, CB(handleVarListChildren), QVariant::fromValue(data)); @@ -3889,19 +3900,19 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, // happens for structs without data, e.g. interfaces. WatchData data; data.name = _(exp); - data.iname = parent.iname + _c('.') + data.name; - data.variable = _(name); + data.iname = parent.iname + '.' + data.name.toLatin1(); + data.variable = name; setWatchDataType(data, item.findChild("type")); setWatchDataValue(data, item.findChild("value")); setWatchDataAddress(data, item.findChild("addr")); setWatchDataSAddress(data, item.findChild("saddr")); data.setHasChildren(false); insertData(data); - } else if (parent.iname.endsWith(_c('.'))) { + } else if (parent.iname.endsWith('.')) { // Happens with anonymous unions WatchData data; - data.iname = _(name); - QString cmd = _("-var-list-children --all-values \"") + data.variable + _c('"'); + data.iname = name; + QByteArray cmd = "-var-list-children --all-values \"" + data.variable + '"'; postCommand(cmd, WatchUpdate, CB(handleVarListChildren), QVariant::fromValue(data)); } else if (exp == "staticMetaObject") { @@ -3912,8 +3923,8 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, // I am not sure this is a good idea... } else { WatchData data; - data.iname = parent.iname + _c('.') + __(exp); - data.variable = _(name); + data.iname = parent.iname + '.' + exp; + data.variable = name; setWatchDataType(data, item.findChild("type")); setWatchDataValue(data, item.findChild("value")); setWatchDataAddress(data, item.findChild("addr")); @@ -3925,7 +3936,7 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, data.name = _(exp); if (data.type == data.name) { if (isPointerType(parent.type)) { - data.exp = _("*(") + parent.exp + _c(')'); + data.exp = "*(" + parent.exp + ')'; data.name = _("*") + parent.name; } else { // A type we derive from? gdb crashes when creating variables here @@ -3933,24 +3944,24 @@ void GdbEngine::handleVarListChildrenHelper(const GdbMi &item, } } else if (exp.startsWith("*")) { // A pointer - data.exp = _("*(") + parent.exp + _c(')'); + data.exp = "*(" + parent.exp + ')'; } else if (startsWithDigit(data.name)) { // An array. No variables needed? data.name = _c('[') + data.name + _c(']'); - data.exp = parent.exp + _('[' + exp + ']'); + data.exp = parent.exp + '[' + exp + ']'; } else if (0 && parent.name.endsWith(_c('.'))) { // Happens with anonymous unions - data.exp = parent.exp + data.name; + data.exp = parent.exp + data.name.toLatin1(); //data.name = "<anonymous union>"; } else if (exp.isEmpty()) { // Happens with anonymous unions data.exp = parent.exp; data.name = tr("<n/a>"); - data.iname = parent.iname + _(".@"); + data.iname = parent.iname + ".@"; data.type = tr("<anonymous union>"); } else { // A structure. Hope there's nothing else... - data.exp = parent.exp + _c('.') + data.name; + data.exp = parent.exp + '.' + data.name.toLatin1(); } if (hasDebuggingHelperForType(data.type)) { @@ -3982,7 +3993,7 @@ void GdbEngine::handleVarListChildren(const GdbResponse &response) // happens e.g. if no debug information is present or // if the class really has no children WatchData data1; - data1.iname = data.iname + _(".child"); + data1.iname = data.iname + ".child"; //: About variable's value data1.value = tr("<no information>"); data1.hasChildren = false; @@ -3990,12 +4001,14 @@ void GdbEngine::handleVarListChildren(const GdbResponse &response) insertData(data1); data.setAllUnneeded(); insertData(data); - } else if (!isAccessSpecifier(data.variable.split(_c('.')).last())) { - data.setChildrenUnneeded(); - insertData(data); - } else { + } else if (data.variable.endsWith("private") + || data.variable.endsWith("protected") + || data.variable.endsWith("public")) { // this skips the spurious "public", "private" etc levels // gdb produces + } else { + data.setChildrenUnneeded(); + insertData(data); } } else { data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data())); @@ -4016,9 +4029,9 @@ void GdbEngine::handleChangedItem(QStandardItem *item) void GdbEngine::assignValueInDebugger(const QString &expression, const QString &value) { - postCommand(_("-var-delete assign")); - postCommand(_("-var-create assign * ") + expression); - postCommand(_("-var-assign assign ") + value, Discardable, CB(handleVarAssign)); + postCommand("-var-delete assign"); + postCommand("-var-create assign * " + expression.toLatin1()); + postCommand("-var-assign assign " + value.toLatin1(), Discardable, CB(handleVarAssign)); } QString GdbEngine::qtDumperLibraryName() const @@ -4070,7 +4083,7 @@ void GdbEngine::tryLoadDebuggingHelpers() file.open(QIODevice::ReadOnly); QByteArray contents = file.readAll(); m_debuggingHelperState = DebuggingHelperLoadTried; - postCommand(_(contents)); + postCommand(contents); return; } if (m_dumperInjectionLoad && inferiorPid() <= 0) // Need PID to inject @@ -4082,20 +4095,23 @@ void GdbEngine::tryLoadDebuggingHelpers() return; m_debuggingHelperState = DebuggingHelperLoadTried; - const QString dlopenLib = - (startParameters().startMode == StartRemote) - ? startParameters().remoteDumperLib : manager()->qtDumperLibraryName(); + QByteArray dlopenLib; + if (startParameters().startMode == StartRemote) + dlopenLib = startParameters().remoteDumperLib.toLocal8Bit(); + else + manager()->qtDumperLibraryName().toLocal8Bit(); #if defined(Q_OS_WIN) if (m_dumperInjectionLoad) { /// Launch asynchronous remote thread to load. SharedLibraryInjector injector(inferiorPid()); QString errorMessage; - if (injector.remoteInject(dlopenLib, false, &errorMessage)) { + const QString dlopenLibString = _(dlopenLib); + if (injector.remoteInject(dlopenLibString, false, &errorMessage)) { debugMessage(_("Dumper injection loading triggered (%1)..."). - arg(dlopenLib)); + arg(dlopenLibString)); } else { debugMessage(_("Dumper loading (%1) failed: %2"). - arg(dlopenLib, errorMessage)); + arg(dlopenLibString, errorMessage)); debugMessage(errorMessage); manager()->showQtDumperLibraryWarning(errorMessage); m_debuggingHelperState = DebuggingHelperUnavailable; @@ -4103,33 +4119,33 @@ void GdbEngine::tryLoadDebuggingHelpers() } } else { debugMessage(_("Loading dumpers via debugger call (%1)..."). - arg(dlopenLib)); - postCommand(_("sharedlibrary .*")); // for LoadLibraryA - //postCommand(_("handle SIGSEGV pass stop print")); - //postCommand(_("set unwindonsignal off")); - postCommand(_("call LoadLibraryA(\"") + GdbMi::escapeCString(dlopenLib) + _("\")"), + arg(_(dlopenLib))); + postCommand("sharedlibrary .*"); // for LoadLibraryA + //postCommand("handle SIGSEGV pass stop print"); + //postCommand("set unwindonsignal off"); + postCommand("call LoadLibraryA(\"" + GdbMi::escapeCString(dlopenLib) + "\")", CB(handleDebuggingHelperSetup)); - postCommand(_("sharedlibrary ") + dotEscape(dlopenLib)); + postCommand("sharedlibrary " + dotEscape(dlopenLib)); } #elif defined(Q_OS_MAC) - //postCommand(_("sharedlibrary libc")); // for malloc - //postCommand(_("sharedlibrary libdl")); // for dlopen - postCommand(_("call (void)dlopen(\"") + GdbMi::escapeCString(dlopenLib) - + _("\", " STRINGIFY(RTLD_NOW) ")"), + //postCommand("sharedlibrary libc"); // for malloc + //postCommand("sharedlibrary libdl"); // for dlopen + postCommand("call (void)dlopen(\"" + GdbMi::escapeCString(dlopenLib) + + "\", " STRINGIFY(RTLD_NOW) ")", CB(handleDebuggingHelperSetup)); - //postCommand(_("sharedlibrary ") + dotEscape(dlopenLib)); + //postCommand("sharedlibrary " + dotEscape(dlopenLib)); #else - //postCommand(_("p dlopen")); - postCommand(_("sharedlibrary libc")); // for malloc - postCommand(_("sharedlibrary libdl")); // for dlopen - postCommand(_("call (void*)dlopen(\"") + GdbMi::escapeCString(dlopenLib) - + _("\", " STRINGIFY(RTLD_NOW) ")"), + //postCommand("p dlopen"); + postCommand("sharedlibrary libc"); // for malloc + postCommand("sharedlibrary libdl"); // for dlopen + postCommand("call (void*)dlopen(\"" + GdbMi::escapeCString(dlopenLib) + + "\", " STRINGIFY(RTLD_NOW) ")", CB(handleDebuggingHelperSetup)); // some older systems like CentOS 4.6 prefer this: - postCommand(_("call (void*)__dlopen(\"") + GdbMi::escapeCString(dlopenLib) - + _("\", " STRINGIFY(RTLD_NOW) ")"), + postCommand("call (void*)__dlopen(\"" + GdbMi::escapeCString(dlopenLib) + + "\", " STRINGIFY(RTLD_NOW) ")", CB(handleDebuggingHelperSetup)); - postCommand(_("sharedlibrary ") + dotEscape(dlopenLib)); + postCommand("sharedlibrary " + dotEscape(dlopenLib)); #endif if (!m_dumperInjectionLoad) tryQueryDebuggingHelpers(); @@ -4138,23 +4154,25 @@ void GdbEngine::tryLoadDebuggingHelpers() void GdbEngine::tryQueryDebuggingHelpers() { // retrieve list of dumpable classes - postCommand(_("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)")); - postCommand(_("p (char*)&qDumpOutBuffer"), CB(handleQueryDebuggingHelper)); + postCommand("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)"); + postCommand("p (char*)&qDumpOutBuffer", CB(handleQueryDebuggingHelper)); } void GdbEngine::recheckDebuggingHelperAvailability() { if (m_gdbAdapter->dumperHandling() != AbstractGdbAdapter::DumperNotAvailable) { // retreive list of dumpable classes - postCommand(_("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)")); - postCommand(_("p (char*)&qDumpOutBuffer"), CB(handleQueryDebuggingHelper)); + postCommand("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)"); + postCommand("p (char*)&qDumpOutBuffer", CB(handleQueryDebuggingHelper)); } } void GdbEngine::watchPoint(const QPoint &pnt) { //qDebug() << "WATCH " << pnt; - postCommand(_("call (void*)watchPoint(%1,%2)").arg(pnt.x()).arg(pnt.y()), + QByteArray x = QByteArray::number(pnt.x()); + QByteArray y = QByteArray::number(pnt.y()); + postCommand("call (void*)watchPoint(" + x + ',' + y + ')', NeedsStop, CB(handleWatchPoint)); } @@ -4188,7 +4206,8 @@ struct MemoryAgentCookie void GdbEngine::fetchMemory(MemoryViewAgent *agent, quint64 addr, quint64 length) { //qDebug() << "GDB MEMORY FETCH" << agent << addr << length; - postCommand(_("-data-read-memory %1 x 1 1 %2").arg(addr).arg(length), + postCommand("-data-read-memory " + QByteArray::number(addr) + " x 1 1 " + + QByteArray::number(length), NeedsStop, CB(handleFetchMemory), QVariant::fromValue(MemoryAgentCookie(agent, addr))); } @@ -4235,9 +4254,10 @@ void GdbEngine::fetchDisassembler(DisassemblerViewAgent *agent, fetchDisassemblerByAddress(agent, true); } else { // Disassemble full function: - QString cmd = _("-data-disassemble -f %1 -l %2 -n -1 -- 1"); - postCommand(cmd.arg(frame.file).arg(frame.line), - Discardable, CB(handleFetchDisassemblerByLine), + QByteArray cmd = "-data-disassemble" + " -f " + frame.file.toLocal8Bit() + + " -l " + QByteArray::number(frame.line) + "-n -1 -- 1"; + postCommand(cmd, Discardable, CB(handleFetchDisassemblerByLine), QVariant::fromValue(DisassemblerAgentCookie(agent))); } } @@ -4249,16 +4269,16 @@ void GdbEngine::fetchDisassemblerByAddress(DisassemblerViewAgent *agent, bool ok = true; quint64 address = agent->address().toULongLong(&ok, 0); QTC_ASSERT(ok, qDebug() << "ADDRESS: " << agent->address() << address; return); - QString start = QString::number(address - 20, 16); - QString end = QString::number(address + 100, 16); + QByteArray start = QByteArray::number(address - 20, 16); + QByteArray end = QByteArray::number(address + 100, 16); // -data-disassemble [ -s start-addr -e end-addr ] // | [ -f filename -l linenum [ -n lines ] ] -- mode if (useMixedMode) - postCommand(_("-data-disassemble -s 0x%1 -e 0x%2 -- 1").arg(start).arg(end), + postCommand("-data-disassemble -s 0x" + start + " -e 0x" + end + " -- 1", Discardable, CB(handleFetchDisassemblerByAddress1), QVariant::fromValue(DisassemblerAgentCookie(agent))); else - postCommand(_("-data-disassemble -s 0x%1 -e 0x%2 -- 0").arg(start).arg(end), + postCommand("-data-disassemble -s 0x" + start + " -e 0x" + end + " -- 0", Discardable, CB(handleFetchDisassemblerByAddress0), QVariant::fromValue(DisassemblerAgentCookie(agent))); } @@ -4420,8 +4440,8 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr return false; } - const QString dumperSourcePath = - Core::ICore::instance()->resourcePath() + _("/gdbmacros/"); + const QByteArray dumperSourcePath = + Core::ICore::instance()->resourcePath().toLocal8Bit() + "/gdbmacros/"; // Do this only after the process is running, so we get no needless error // notifications @@ -4437,48 +4457,46 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr debugMessage(_("GDB STARTED, INITIALIZING IT")); m_commandTimer->setInterval(commandTimeoutTime()); - postCommand(_("show version"), CB(handleShowVersion)); + postCommand("show version", CB(handleShowVersion)); - postCommand(_("-interpreter-exec console \"python execfile('%1dumper.py')\"") - .arg(dumperSourcePath), + postCommand("-interpreter-exec console \"python execfile('" + dumperSourcePath + "dumper.py')\"", NonCriticalResponse); - postCommand(_("-interpreter-exec console \"python execfile('%1gdbmacros.py')\"") - .arg(dumperSourcePath), + postCommand("-interpreter-exec console \"python execfile('" + dumperSourcePath + "gdbmacros.py')\"", NonCriticalResponse); - postCommand(_("-interpreter-exec console \"help bb\""), + postCommand("-interpreter-exec console \"help bb\"", CB(handleIsSynchroneous)); - //postCommand(_("-enable-timings"); - postCommand(_("set print static-members off")); // Seemingly doesn't work. - //postCommand(_("set debug infrun 1")); - //postCommand(_("define hook-stop\n-thread-list-ids\n-stack-list-frames\nend")); - //postCommand(_("define hook-stop\nprint 4\nend")); - //postCommand(_("define hookpost-stop\nprint 5\nend")); - //postCommand(_("define hook-call\nprint 6\nend")); - //postCommand(_("define hookpost-call\nprint 7\nend")); - //postCommand(_("set print object on")); // works with CLI, but not MI - //postCommand(_("set step-mode on")); // we can't work with that yes - //postCommand(_("set exec-done-display on")); - //postCommand(_("set print pretty on")); - //postCommand(_("set confirm off")); - //postCommand(_("set pagination off")); + //postCommand("-enable-timings"); + postCommand("set print static-members off"); // Seemingly doesn't work. + //postCommand("set debug infrun 1"); + //postCommand("define hook-stop\n-thread-list-ids\n-stack-list-frames\nend"); + //postCommand("define hook-stop\nprint 4\nend"); + //postCommand("define hookpost-stop\nprint 5\nend"); + //postCommand("define hook-call\nprint 6\nend"); + //postCommand("define hookpost-call\nprint 7\nend"); + //postCommand("set print object on"); // works with CLI, but not MI + //postCommand("set step-mode on"); // we can't work with that yes + //postCommand("set exec-done-display on"); + //postCommand("set print pretty on"); + //postCommand("set confirm off"); + //postCommand("set pagination off"); // The following does not work with 6.3.50-20050815 (Apple version gdb-1344) // (Mac OS 10.6), but does so for gdb-966 (10.5): - //postCommand(_("set print inferior-events 1")); + //postCommand("set print inferior-events 1"); - postCommand(_("set breakpoint pending on")); - postCommand(_("set print elements 10000")); + postCommand("set breakpoint pending on"); + postCommand("set print elements 10000"); - //postCommand(_("set substitute-path /var/tmp/qt-x11-src-4.5.0 " - // "/home/sandbox/qtsdk-2009.01/qt")); + //postCommand("set substitute-path /var/tmp/qt-x11-src-4.5.0 " + // "/home/sandbox/qtsdk-2009.01/qt"); // one of the following is needed to prevent crashes in gdb on code like: // template <class T> T foo() { return T(0); } // int main() { return foo<int>(); } // (gdb) call 'int foo<int>'() // /build/buildd/gdb-6.8/gdb/valops.c:2069: internal-error: - postCommand(_("set overload-resolution off")); + postCommand("set overload-resolution off"); //postCommand(_("set demangle-style none")); // From the docs: // Stop means reenter debugger if this signal happens (implies print). @@ -4489,19 +4507,19 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr // We need "print" as otherwise we would get no feedback whatsoever // Custom DebuggingHelper crashs which happen regularily for when accessing // uninitialized variables. - postCommand(_("handle SIGSEGV nopass stop print")); + postCommand("handle SIGSEGV nopass stop print"); // This is useful to kill the inferior whenever gdb dies. //postCommand(_("handle SIGTERM pass nostop print")); - postCommand(_("set unwindonsignal on")); - //postCommand(_("pwd")); - postCommand(_("set width 0")); - postCommand(_("set height 0")); + postCommand("set unwindonsignal on"); + //postCommand("pwd"); + postCommand("set width 0"); + postCommand("set height 0"); if (m_isMacGdb) { - postCommand(_("-gdb-set inferior-auto-start-cfm off")); - postCommand(_("-gdb-set sharedLibrary load-rules " + postCommand("-gdb-set inferior-auto-start-cfm off"); + postCommand("-gdb-set sharedLibrary load-rules " "dyld \".*libSystem.*\" all " "dyld \".*libauto.*\" all " "dyld \".*AppKit.*\" all " @@ -4509,13 +4527,13 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr "dyld \".*Foundation.*\" all " "dyld \".*CFDataFormatters.*\" all " "dyld \".*libobjc.*\" all " - "dyld \".*CarbonDataFormatters.*\" all")); + "dyld \".*CarbonDataFormatters.*\" all"); } QString scriptFileName = theDebuggerStringSetting(GdbScriptFile); if (!scriptFileName.isEmpty()) { if (QFileInfo(scriptFileName).isReadable()) { - postCommand(_("source ") + scriptFileName); + postCommand("source " + scriptFileName.toLocal8Bit()); } else { showMessageBox(QMessageBox::Warning, tr("Cannot find debugger initialization script"), @@ -4527,10 +4545,10 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr } if (m_gdbAdapter->dumperHandling() == AbstractGdbAdapter::DumperLoadedByGdbPreload && checkDebuggingHelpers()) { - QString cmd = _("set environment "); - cmd += _(Debugger::Constants::Internal::LD_PRELOAD_ENV_VAR); - cmd += _c(' '); - cmd += manager()->qtDumperLibraryName(); + QByteArray cmd = "set environment "; + cmd += Debugger::Constants::Internal::LD_PRELOAD_ENV_VAR; + cmd += ' '; + cmd += manager()->qtDumperLibraryName().toLocal8Bit(); postCommand(cmd); m_debuggingHelperState = DebuggingHelperLoadTried; } @@ -4601,20 +4619,17 @@ void GdbEngine::handleAdapterStarted() void GdbEngine::handleInferiorPrepared() { - const QString qtInstallPath = m_startParameters->qtInstallPath; + const QByteArray qtInstallPath = m_startParameters->qtInstallPath.toLocal8Bit(); if (!qtInstallPath.isEmpty()) { - QString qtBuildPath; + QByteArray qtBuildPath; #if defined(Q_OS_WIN) - qtBuildPath = _("C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt"); - postCommand(_("set substitute-path %1 %2") - .arg(qtBuildPath).arg(qtInstallPath)); - qtBuildPath = _("C:/iwmake/build_mingw_opensource"); - postCommand(_("set substitute-path %1 %2") - .arg(qtBuildPath).arg(qtInstallPath)); + qtBuildPath = "C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt"; + postCommand("set substitute-path " + qtBuildPath + ' ' + qtInstallPath); + qtBuildPath = "C:/iwmake/build_mingw_opensource"; + postCommand("set substitute-path " + qtBuildPath + ' ' + qtInstallPath); #elif defined(Q_OS_UNIX) && !defined (Q_OS_MAC) - qtBuildPath = _("/var/tmp/qt-x11-src-4.6.0"); - postCommand(_("set substitute-path %1 %2") - .arg(qtBuildPath).arg(qtInstallPath)); + qtBuildPath = "/var/tmp/qt-x11-src-4.6.0"; + postCommand("set substitute-path " + qtBuildPath + ' ' + qtInstallPath); #endif } diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 3a1bd2c945a..3aff5250469 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -201,7 +201,7 @@ private: ////////// Gdb Command Management ////////// GdbCommandCallback callback; AdapterCallback adapterCallback; const char *callbackName; - QString command; + QByteArray command; QVariant cookie; QTime postTime; }; @@ -211,20 +211,20 @@ private: ////////// Gdb Command Management ////////// // send and decrements on receipt, effectively preventing // watch model updates before everything is finished. void flushCommand(const GdbCommand &cmd); - void postCommand(const QString &command, + void postCommand(const QByteArray &command, GdbCommandFlags flags, GdbCommandCallback callback = 0, const char *callbackName = 0, const QVariant &cookie = QVariant()); - void postCommand(const QString &command, + void postCommand(const QByteArray &command, GdbCommandCallback callback = 0, const char *callbackName = 0, const QVariant &cookie = QVariant()); - void postCommand(const QString &command, + void postCommand(const QByteArray &command, AdapterCallback callback, const char *callbackName, const QVariant &cookie = QVariant()); - void postCommand(const QString &command, + void postCommand(const QByteArray &command, GdbCommandFlags flags, AdapterCallback callback, const char *callbackName, @@ -458,7 +458,7 @@ private: ////////// View & Data Stuff ////////// void setWatchDataType(WatchData &data, const GdbMi &mi); void setWatchDataDisplayedType(WatchData &data, const GdbMi &mi); - QSet<QString> m_processedNames; + QSet<QByteArray> m_processedNames; QMap<QString, QString> m_varToType; private: ////////// Dumper Management ////////// diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp index a4c0d34d86b..76f2aa10861 100644 --- a/src/plugins/debugger/gdb/plaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp @@ -99,11 +99,13 @@ void PlainGdbAdapter::startAdapter() void PlainGdbAdapter::startInferior() { QTC_ASSERT(state() == InferiorStarting, qDebug() << state()); - if (!startParameters().processArgs.isEmpty()) - m_engine->postCommand(_("-exec-arguments ") - + startParameters().processArgs.join(_(" "))); + if (!startParameters().processArgs.isEmpty()) { + QString args = startParameters().processArgs.join(_(" ")); + m_engine->postCommand("-exec-arguments " + args.toLocal8Bit()); + } QFileInfo fi(startParameters().executable); - m_engine->postCommand(_("-file-exec-and-symbols \"%1\"").arg(fi.absoluteFilePath()), + QByteArray path = fi.absoluteFilePath().toLocal8Bit(); + m_engine->postCommand("-file-exec-and-symbols \"" + path + '"', CB(handleFileExecAndSymbols)); } @@ -116,7 +118,7 @@ void PlainGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response) // Note that successfully preloading the debugging helpers will // automatically load pthreads, so this will be unnecessary. if (m_engine->m_gdbVersion < 70000) - m_engine->postCommand(_("info target"), CB(handleInfoTarget)); + m_engine->postCommand("info target", CB(handleInfoTarget)); #endif emit inferiorPrepared(); } else { @@ -138,7 +140,7 @@ void PlainGdbAdapter::handleInfoTarget(const GdbResponse &response) if (needle.indexIn(msg) != -1) { m_engine->m_entryPoint = "0x" + needle.cap(1).toLatin1().rightJustified(sizeof(void *) * 2, '0'); - m_engine->postCommand(_("tbreak *0x") + needle.cap(1)); + m_engine->postCommand("tbreak *0x" + needle.cap(1).toAscii()); // Do nothing here - inferiorPrepared handles the sequencing. } else { emit inferiorStartFailed(_("Parsing start address failed")); @@ -152,7 +154,7 @@ void PlainGdbAdapter::handleInfoTarget(const GdbResponse &response) void PlainGdbAdapter::startInferiorPhase2() { setState(InferiorRunningRequested); - m_engine->postCommand(_("-exec-run"), GdbEngine::RunRequest, CB(handleExecRun)); + m_engine->postCommand("-exec-run", GdbEngine::RunRequest, CB(handleExecRun)); } void PlainGdbAdapter::handleExecRun(const GdbResponse &response) diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp index 01fd28053be..d3dd16273b6 100644 --- a/src/plugins/debugger/gdb/remotegdbadapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp @@ -155,21 +155,24 @@ void RemoteGdbAdapter::startInferior() { QTC_ASSERT(state() == InferiorStarting, qDebug() << state()); - m_engine->postCommand(_("set architecture %1") - .arg(startParameters().remoteArchitecture)); - m_engine->postCommand(_("set sysroot %1").arg(startParameters().sysRoot)); - m_engine->postCommand(_("set solib-search-path %1"). - arg(QFileInfo(startParameters().dumperLibrary).path())); - - if (!startParameters().processArgs.isEmpty()) - m_engine->postCommand(_("-exec-arguments ") - + startParameters().processArgs.join(_(" "))); + m_engine->postCommand("set architecture " + + startParameters().remoteArchitecture.toLatin1()); + m_engine->postCommand("set sysroot " + + startParameters().sysRoot.toLocal8Bit()); + m_engine->postCommand("set solib-search-path " + + QFileInfo(startParameters().dumperLibrary).path().toLocal8Bit()); + + if (!startParameters().processArgs.isEmpty()) { + QString args = startParameters().processArgs.join(_(" ")); + m_engine->postCommand("-exec-arguments " + args.toLocal8Bit()); + } - m_engine->postCommand(_("set target-async on"), CB(handleSetTargetAsync)); + m_engine->postCommand("set target-async on", CB(handleSetTargetAsync)); QString x = startParameters().executable; QFileInfo fi(startParameters().executable); QString fileName = fi.absoluteFilePath(); - m_engine->postCommand(_("-file-exec-and-symbols \"%1\"").arg(fileName), + m_engine->postCommand("-file-exec-and-symbols \"" + + fileName.toLocal8Bit() + '"', CB(handleFileExecAndSymbols)); } @@ -191,7 +194,7 @@ void RemoteGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response) // (2) starts the remote application // (3) stops the remote application (early, e.g. in the dynamic linker) QString channel = startParameters().remoteChannel; - m_engine->postCommand(_("target remote %1").arg(channel), + m_engine->postCommand("target remote " + channel.toLatin1(), CB(handleTargetRemote)); } else { QString msg = tr("Starting remote executable failed:\n"); @@ -224,7 +227,7 @@ void RemoteGdbAdapter::startInferiorPhase2() void RemoteGdbAdapter::interruptInferior() { - m_engine->postCommand(_("-exec-interrupt")); + m_engine->postCommand("-exec-interrupt"); } void RemoteGdbAdapter::shutdown() diff --git a/src/plugins/debugger/gdb/termgdbadapter.cpp b/src/plugins/debugger/gdb/termgdbadapter.cpp index 53378a42053..6b096b28301 100644 --- a/src/plugins/debugger/gdb/termgdbadapter.cpp +++ b/src/plugins/debugger/gdb/termgdbadapter.cpp @@ -129,7 +129,8 @@ void TermGdbAdapter::startInferior() QTC_ASSERT(state() == InferiorStarting, qDebug() << state()); const qint64 attachedPID = m_stubProc.applicationPID(); m_engine->handleInferiorPidChanged(attachedPID); - m_engine->postCommand(_("attach %1").arg(attachedPID), CB(handleStubAttached)); + m_engine->postCommand("attach " + QByteArray::number(attachedPID), + CB(handleStubAttached)); } void TermGdbAdapter::handleStubAttached(const GdbResponse &response) @@ -140,7 +141,7 @@ void TermGdbAdapter::handleStubAttached(const GdbResponse &response) debugMessage(_("INFERIOR ATTACHED")); emit inferiorPrepared(); #ifdef Q_OS_LINUX - m_engine->postCommand(_("-stack-list-frames 0 0"), CB(handleEntryPoint)); + m_engine->postCommand("-stack-list-frames 0 0", CB(handleEntryPoint)); #endif } else if (response.resultClass == GdbResultError) { QString msg = QString::fromLocal8Bit(response.data.findChild("msg").data()); diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index 4d459a74fdf..2b972ac3266 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -1685,15 +1685,15 @@ void TrkGdbAdapter::handleCreateProcess(const TrkResult &result) logMessage(startMsg); - const QString fileName = m_symbolFile; - if (m_symbolFile.isEmpty()) { + const QByteArray symbolFile = m_symbolFile.toLocal8Bit(); + if (symbolFile.isEmpty()) { logMessage(_("WARNING: No symbol file available.")); } else { - m_engine->postCommand(_("add-symbol-file \"%1\" %2").arg(m_symbolFile) - .arg(m_session.codeseg)); - m_engine->postCommand(_("symbol-file \"%1\"").arg(m_symbolFile)); + m_engine->postCommand("add-symbol-file \"" + symbolFile + "\" " + + QByteArray::number(m_session.codeseg)); + m_engine->postCommand("symbol-file \"" + symbolFile + "\""); } - m_engine->postCommand(_("target remote ") + gdbServerName(), + m_engine->postCommand("target remote " + gdbServerName().toLatin1(), CB(handleTargetRemote)); } diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h index d7f16d04637..de3b8a3df8a 100644 --- a/src/plugins/debugger/registerhandler.h +++ b/src/plugins/debugger/registerhandler.h @@ -46,10 +46,10 @@ class Register { public: Register() : changed(true) {} - Register(QString const &name_) : name(name_), changed(true) {} + Register(QByteArray const &name_) : name(name_), changed(true) {} public: - QString name; + QByteArray name; QString value; bool changed; }; diff --git a/src/plugins/debugger/script/scriptengine.cpp b/src/plugins/debugger/script/scriptengine.cpp index b8436f1084c..bcb397ca749 100644 --- a/src/plugins/debugger/script/scriptengine.cpp +++ b/src/plugins/debugger/script/scriptengine.cpp @@ -390,7 +390,7 @@ void ScriptEngine::attemptBreakpointSynchronization() updateNeeded = true; } if (data->bpNumber.isEmpty()) { - data->bpNumber = QString::number(index + 1); + data->bpNumber = QByteArray::number(index + 1); updateNeeded = true; } if (!data->fileName.isEmpty() && data->markerFileName.isEmpty()) { @@ -560,7 +560,7 @@ void ScriptEngine::maybeBreakNow(bool byFunction) // we just run into a breakpoint //SDEBUG("RESOLVING BREAKPOINT AT " << fileName << lineNumber); BreakpointData *data = handler->at(index); - data->bpLineNumber = QString::number(lineNumber); + data->bpLineNumber = QByteArray::number(lineNumber); data->bpFileName = fileName; data->bpFuncName = functionName; data->markerLineNumber = lineNumber; @@ -703,8 +703,8 @@ void ScriptEngine::updateSubItem(const WatchData &data0) while (it.hasNext()) { it.next(); WatchData data1; - data1.iname = data.iname + "." + it.name(); - data1.exp = it.name(); + data1.iname = data.iname + "." + it.name().toLatin1(); + data1.exp = it.name().toLatin1(); data1.name = it.name(); data1.scriptValue = it.value(); if (manager()->watchHandler()->isExpandedIName(data1.iname)) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 361b5863ba8..37d9dc7794c 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -224,7 +224,7 @@ void WatchData::setType(const QString &str, bool guessChildrenFromType) void WatchData::setAddress(const QString &str) { - addr = str; + addr = str.toLatin1(); } QString WatchData::toString() const @@ -349,15 +349,15 @@ WatchModel::WatchModel(WatchHandler *handler, WatchType type) switch (m_type) { case LocalsWatch: - m_root->iname = QLatin1String("local"); + m_root->iname = "local"; m_root->name = WatchHandler::tr("Locals"); break; case WatchersWatch: - m_root->iname = QLatin1String("watch"); + m_root->iname = "watch"; m_root->name = WatchHandler::tr("Watchers"); break; case TooltipsWatch: - m_root->iname = QLatin1String("tooltip"); + m_root->iname = "tooltip"; m_root->name = WatchHandler::tr("Tooltip"); break; } @@ -461,11 +461,11 @@ void WatchModel::destroyItem(WatchItem *item) delete item; } -static QString parentName(const QString &iname) +static QByteArray parentName(const QByteArray &iname) { - int pos = iname.lastIndexOf(QLatin1Char('.')); + int pos = iname.lastIndexOf('.'); if (pos == -1) - return QString(); + return QByteArray(); return iname.left(pos); } @@ -931,9 +931,9 @@ QVariant WatchModel::headerData(int section, Qt::Orientation orientation, int ro return QVariant(); } -struct IName : public QString +struct IName : public QByteArray { - IName(const QString &iname) : QString(iname) {} + IName(const QByteArray &iname) : QByteArray(iname) {} }; bool iNameLess(const QString &iname1, const QString &iname2) @@ -1028,7 +1028,7 @@ void WatchModel::insertBulkData(const QList<WatchData> &list) //foreach (const WatchItem &data, list) // qDebug() << "BULK: " << ++bulk << data.toString(); QTC_ASSERT(!list.isEmpty(), return); - QString parentIName = parentName(list.at(0).iname); + QByteArray parentIName = parentName(list.at(0).iname); WatchItem *parent = findItem(parentIName, m_root); if (!parent) { WatchData parent; @@ -1117,7 +1117,7 @@ void WatchModel::insertBulkData(const QList<WatchData> &list) dump(); } -WatchItem *WatchModel::findItem(const QString &iname, WatchItem *root) const +WatchItem *WatchModel::findItem(const QByteArray &iname, WatchItem *root) const { if (root->iname == iname) return root; @@ -1248,7 +1248,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list) if (list.isEmpty()) return; - QMap<QString, QList<WatchData> > hash; + QMap<QByteArray, QList<WatchData> > hash; foreach (const WatchData &data, list) { // we insert everything, including incomplete stuff @@ -1259,7 +1259,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list) qWarning("%s:%d: Attempt to bulk-insert invalid watch item: %s", __FILE__, __LINE__, qPrintable(data.toString())); } } - foreach (const QString &parentIName, hash.keys()) { + foreach (const QByteArray &parentIName, hash.keys()) { WatchModel *model = modelForIName(parentIName); QTC_ASSERT(model, return); model->insertBulkData(hash[parentIName]); @@ -1271,7 +1271,7 @@ void WatchHandler::insertBulkData(const QList<WatchData> &list) } } -void WatchHandler::removeData(const QString &iname) +void WatchHandler::removeData(const QByteArray &iname) { WatchModel *model = modelForIName(iname); if (!model) @@ -1287,21 +1287,21 @@ void WatchHandler::watchExpression() watchExpression(action->data().toString()); } -QString WatchHandler::watcherName(const QString &exp) +QByteArray WatchHandler::watcherName(const QByteArray &exp) { - return QLatin1String("watch.") + QString::number(m_watcherNames[exp]); + return "watch." + QByteArray::number(m_watcherNames[exp]); } void WatchHandler::watchExpression(const QString &exp) { // FIXME: 'exp' can contain illegal characters - m_watcherNames[exp] = watcherCounter++; WatchData data; - data.exp = exp; + data.exp = exp.toLatin1(); data.name = exp; + m_watcherNames[data.exp] = watcherCounter++; if (exp.isEmpty() || exp == watcherEditPlaceHolder()) data.setAllUnneeded(); - data.iname = watcherName(exp); + data.iname = watcherName(data.exp); IDebuggerEngine *engine = m_manager->currentEngine(); if (engine && engine->isSynchroneous()) m_manager->updateWatchData(data); @@ -1392,8 +1392,9 @@ void WatchHandler::removeWatchExpression() removeWatchExpression(action->data().toString()); } -void WatchHandler::removeWatchExpression(const QString &exp) +void WatchHandler::removeWatchExpression(const QString &exp0) { + QByteArray exp = exp0.toLatin1(); MODEL_DEBUG("REMOVE WATCH: " << exp); m_watcherNames.remove(exp); foreach (WatchItem *item, m_watchers->rootItem()->children) { @@ -1409,7 +1410,7 @@ void WatchHandler::updateWatchers() { //qDebug() << "UPDATE WATCHERS"; // copy over all watchers and mark all watchers as incomplete - foreach (const QString &exp, m_watcherNames.keys()) { + foreach (const QByteArray &exp, m_watcherNames.keys()) { WatchData data; data.iname = watcherName(exp); data.setAllNeeded(); @@ -1423,7 +1424,7 @@ void WatchHandler::loadWatchers() { QVariant value = m_manager->sessionValue("Watchers"); foreach (const QString &exp, value.toStringList()) - m_watcherNames[exp] = watcherCounter++; + m_watcherNames[exp.toLatin1()] = watcherCounter++; //qDebug() << "LOAD WATCHERS: " << m_watchers; //reinitializeWatchersHelper(); @@ -1433,7 +1434,7 @@ QStringList WatchHandler::watchedExpressions() const { // Filter out invalid watchers. QStringList watcherNames; - QHashIterator<QString, int> it(m_watcherNames); + QHashIterator<QByteArray, int> it(m_watcherNames); while (it.hasNext()) { it.next(); const QString &watcherName = it.key(); @@ -1487,7 +1488,7 @@ void WatchHandler::loadSessionData() { loadWatchers(); loadTypeFormats(); - foreach (const QString &exp, m_watcherNames.keys()) { + foreach (const QByteArray &exp, m_watcherNames.keys()) { WatchData data; data.iname = watcherName(exp); data.setAllUnneeded(); @@ -1508,19 +1509,19 @@ WatchModel *WatchHandler::model(WatchType type) const return 0; } -WatchModel *WatchHandler::modelForIName(const QString &iname) const +WatchModel *WatchHandler::modelForIName(const QByteArray &iname) const { - if (iname.startsWith(QLatin1String("local"))) + if (iname.startsWith("local")) return m_locals; - if (iname.startsWith(QLatin1String("watch"))) + if (iname.startsWith("watch")) return m_watchers; - if (iname.startsWith(QLatin1String("tooltip"))) + if (iname.startsWith("tooltip")) return m_tooltips; QTC_ASSERT(false, qDebug() << "INAME: " << iname); return 0; } -WatchData *WatchHandler::findItem(const QString &iname) const +WatchData *WatchHandler::findItem(const QByteArray &iname) const { const WatchModel *model = modelForIName(iname); QTC_ASSERT(model, return 0); diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index 976a51f743d..6a56ca1a332 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -109,8 +109,8 @@ public: QString toString() const; QString toToolTip() const; - bool isLocal() const { return iname.startsWith(QLatin1String("local.")); } - bool isWatcher() const { return iname.startsWith(QLatin1String("watch.")); } + bool isLocal() const { return iname.startsWith("local."); } + bool isWatcher() const { return iname.startsWith("watch."); } bool isValid() const { return !iname.isEmpty(); } bool isEqual(const WatchData &other) const; @@ -119,17 +119,17 @@ public: static QString shadowedName(const QString &name, int seen); public: - QString iname; // internal name sth like 'local.baz.public.a' - QString exp; // the expression + QByteArray iname; // internal name sth like 'local.baz.public.a' + QByteArray exp; // the expression QString name; // displayed name QString value; // displayed value QByteArray editvalue; // displayed value QString valuetooltip; // tooltip in value column QString type; // type for further processing - QString displayedType; // displayed type (optional) - QString variable; // name of internal Gdb variable if created - QString addr; // displayed adress - QString saddr; // stored address (pointer in container) + QString displayedType;// displayed type (optional) + QByteArray variable; // name of internal Gdb variable if created + QByteArray addr; // displayed adress + QByteArray saddr; // stored address (pointer in container) QString framekey; // key for type cache QScriptValue scriptValue; // if needed... bool hasChildren; @@ -215,7 +215,7 @@ private: void insertData(const WatchData &data); void insertBulkData(const QList<WatchData> &data); - WatchItem *findItem(const QString &iname, WatchItem *root) const; + WatchItem *findItem(const QByteArray &iname, WatchItem *root) const; void reinitialize(); void removeOutdated(); void removeOutdatedHelper(WatchItem *item); @@ -243,7 +243,7 @@ private: WatchHandler *m_handler; WatchType m_type; WatchItem *m_root; - QSet<QString> m_fetchTriggered; + QSet<QByteArray> m_fetchTriggered; // Part of the workaround to update the [+] marker when items // are added to a container. bool m_inExtraLayoutChanged; @@ -256,7 +256,7 @@ class WatchHandler : public QObject public: explicit WatchHandler(DebuggerManager *manager); WatchModel *model(WatchType type) const; - WatchModel *modelForIName(const QString &data) const; + WatchModel *modelForIName(const QByteArray &iname) const; //public slots: void cleanup(); @@ -272,20 +272,20 @@ public: void insertData(const WatchData &data); void insertBulkData(const QList<WatchData> &data); - void removeData(const QString &iname); - WatchData *findItem(const QString &iname) const; + void removeData(const QByteArray &iname); + WatchData *findItem(const QByteArray &iname) const; void loadSessionData(); void saveSessionData(); - bool isDisplayedIName(const QString &iname) const + bool isDisplayedIName(const QByteArray &iname) const { return m_displayedINames.contains(iname); } - bool isExpandedIName(const QString &iname) const + bool isExpandedIName(const QByteArray &iname) const { return m_expandedINames.contains(iname); } - QSet<QString> expandedINames() const + QSet<QByteArray> expandedINames() const { return m_expandedINames; } QStringList watchedExpressions() const; - QHash<QString, int> watcherNames() const + QHash<QByteArray, int> watcherNames() const { return m_watcherNames; } static QString watcherEditPlaceHolder(); @@ -306,14 +306,14 @@ private: typedef QMap<QString, QPointer<QWidget> > EditWindows; EditWindows m_editWindows; - QHash<QString, int> m_watcherNames; - QString watcherName(const QString &exp); + QHash<QByteArray, int> m_watcherNames; + QByteArray watcherName(const QByteArray &exp); QHash<QString, int> m_typeFormats; QHash<QString, int> m_individualFormats; void setDisplayedIName(const QString &iname, bool on); - QSet<QString> m_expandedINames; // those expanded in the treeview - QSet<QString> m_displayedINames; // those with "external" viewers + QSet<QByteArray> m_expandedINames; // those expanded in the treeview + QSet<QByteArray> m_displayedINames; // those with "external" viewers WatchModel *m_locals; WatchModel *m_watchers; diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp index c5c9aac5006..1aabf139f90 100644 --- a/src/plugins/debugger/watchutils.cpp +++ b/src/plugins/debugger/watchutils.cpp @@ -138,12 +138,11 @@ QDebug operator<<(QDebug d, const Scope &scope) namespace Debugger { namespace Internal { -QString dotEscape(QString str) +QByteArray dotEscape(QByteArray str) { - const QChar dot = QLatin1Char('.'); - str.replace(QLatin1Char(' '), dot); - str.replace(QLatin1Char('\\'), dot); - str.replace(QLatin1Char('/'), dot); + str.replace(' ', '.'); + str.replace('\\', '.'); + str.replace('/', '.'); return str; } @@ -275,15 +274,6 @@ bool isCharPointerType(const QString &type) || type == QLatin1String("char const *"); } -bool isAccessSpecifier(const QString &str) -{ - static const QStringList items = QStringList() - << QLatin1String("private") - << QLatin1String("protected") - << QLatin1String("public"); - return items.contains(str); -} - bool startsWithDigit(const QString &str) { return !str.isEmpty() && str.at(0).isDigit(); @@ -1270,13 +1260,13 @@ void QtDumperHelper::evaluationParameters(const WatchData &data, inBuffer->clear(); inBuffer->append(outertype.toUtf8()); inBuffer->append('\0'); - inBuffer->append(data.iname.toUtf8()); + inBuffer->append(data.iname); inBuffer->append('\0'); - inBuffer->append(data.exp.toUtf8()); + inBuffer->append(data.exp); inBuffer->append('\0'); inBuffer->append(inner.toUtf8()); inBuffer->append('\0'); - inBuffer->append(data.iname.toUtf8()); + inBuffer->append(data.iname); inBuffer->append('\0'); if (debug) @@ -1361,6 +1351,17 @@ static bool gdbMiGetStringValue(QString *target, return true; } +static bool gdbMiGetByteArrayValue(QByteArray *target, + const GdbMi &node, + const char *child, + const char *encodingChild = 0) +{ + QString str; + const bool success = gdbMiGetStringValue(&str, node, child, encodingChild); + *target = str.toLatin1(); + return success; +} + static bool gdbMiGetBoolValue(bool *target, const GdbMi &node, const char *child) @@ -1377,7 +1378,8 @@ static bool gdbMiGetBoolValue(bool *target, * (next level only, it is not further inherited). For example, the root item * can provide a "childtype" node that specifies the type of the children. */ -struct GdbMiRecursionContext { +struct GdbMiRecursionContext +{ GdbMiRecursionContext(int recursionLevelIn = 0) : recursionLevel(recursionLevelIn), childNumChild(-1), childIndex(0) {} @@ -1385,7 +1387,7 @@ struct GdbMiRecursionContext { int childNumChild; int childIndex; QString childType; - QString parentIName; + QByteArray parentIName; }; static void gbdMiToWatchData(const GdbMi &root, @@ -1396,16 +1398,19 @@ static void gbdMiToWatchData(const GdbMi &root, qDebug() << Q_FUNC_INFO << '\n' << root.toString(false, 0); WatchData w; QString v; + QByteArray b; // Check for name/iname and use as expression default if (ctx.recursionLevel == 0) { // parents have only iname, from which name is derived - if (!gdbMiGetStringValue(&w.iname, root, "iname")) + QString iname; + if (!gdbMiGetStringValue(&iname, root, "iname")) qWarning("Internal error: iname missing"); - w.name = w.iname; + w.iname = iname.toLatin1(); + w.name = iname; const int lastDotPos = w.name.lastIndexOf(QLatin1Char('.')); if (lastDotPos != -1) w.name.remove(0, lastDotPos + 1); - w.exp = w.name; + w.exp = w.name.toLatin1(); } else { // Children can have a 'name' attribute. If missing, assume array index // For display purposes, it can be overridden by "key" @@ -1414,8 +1419,8 @@ static void gbdMiToWatchData(const GdbMi &root, } // Set iname w.iname = ctx.parentIName; - w.iname += QLatin1Char('.'); - w.iname += w.name; + w.iname += '.'; + w.iname += w.name.toLatin1(); // Key? QString key; if (gdbMiGetStringValue(&key, root, "key", "keyencoded")) { @@ -1427,12 +1432,12 @@ static void gbdMiToWatchData(const GdbMi &root, qWarning("%s\n", qPrintable(msg)); } gdbMiGetStringValue(&w.displayedType, root, "displayedtype"); - if (gdbMiGetStringValue(&v, root, "editvalue")) - w.editvalue = v.toLatin1(); - if (gdbMiGetStringValue(&v, root, "exp")) - w.exp = v; - gdbMiGetStringValue(&w.addr, root, "addr"); - gdbMiGetStringValue(&w.saddr, root, "saddr"); + if (gdbMiGetByteArrayValue(&b, root, "editvalue")) + w.editvalue = b; + if (gdbMiGetByteArrayValue(&b, root, "exp")) + w.exp = b; + gdbMiGetByteArrayValue(&w.addr, root, "addr"); + gdbMiGetByteArrayValue(&w.saddr, root, "saddr"); gdbMiGetBoolValue(&w.valueEnabled, root, "valueenabled"); gdbMiGetBoolValue(&w.valueEditable, root, "valueeditable"); if (gdbMiGetStringValue(&v, root, "valuetooltip", "valuetooltipencoded")) diff --git a/src/plugins/debugger/watchutils.h b/src/plugins/debugger/watchutils.h index 477eed2d33a..d880359fca3 100644 --- a/src/plugins/debugger/watchutils.h +++ b/src/plugins/debugger/watchutils.h @@ -55,7 +55,7 @@ namespace Internal { class WatchData; class GdbMi; -QString dotEscape(QString str); +QByteArray dotEscape(QByteArray str); QString currentTime(); bool isSkippableFunction(const QString &funcName, const QString &fileName); bool isLeavableFunction(const QString &funcName, const QString &fileName); @@ -71,7 +71,6 @@ bool hasSideEffects(const QString &exp); bool isKeyWord(const QString &exp); bool isPointerType(const QString &type); bool isCharPointerType(const QString &type); -bool isAccessSpecifier(const QString &str); bool startsWithDigit(const QString &str); QString stripPointerType(QString type); QString gdbQuoteTypes(const QString &type); -- GitLab