diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index 16ff672c59d6cca8398a09e1764a061421f3014a..ae3ba8b188f8691de7b44bd1eb0927c64d635d8d 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -203,6 +203,7 @@ void Snapshot::insertMemory(const MemoryRange &range, const QByteArray &ba) // Not combinable, add chunk. memory.insert(range, ba); } + /////////////////////////////////////////////////////////////////////////// // // TrkGdbAdapter @@ -1046,6 +1047,9 @@ void TrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd) void TrkGdbAdapter::sendTrkMessage(byte code, TrkCallback callback, const QByteArray &data, const QVariant &cookie) { + if (m_verbose >= 2) + logMessage("trk: -> " + QByteArray::number(code, 16) + " " + + stringFromArray(data)); m_trkDevice->sendTrkMessage(code, callback, data, cookie); } @@ -1062,6 +1066,8 @@ void TrkGdbAdapter::handleTrkError(const QString &msg) void TrkGdbAdapter::handleTrkResult(const TrkResult &result) { + if (m_verbose >= 2) + logMessage("trk: <- " + result.toString()); if (result.isDebugOutput) { // It looks like those messages _must not_ be acknowledged. // If we do so, TRK will complain about wrong sequencing. @@ -1119,11 +1125,13 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result) // several instruction steps, better avoid the multiple // roundtrips through TRK in favour of an additional // roundtrip through gdb. But gdb will ask for all registers. - //sendGdbServerMessage("S05", "Target stopped"); - // -- or -- - QByteArray ba = "T05"; - appendRegister(&ba, RegisterPSGdb, addr); - sendGdbServerMessage(ba, "Registers"); + #if 1 + sendGdbServerMessage("S05", "Target stopped"); + #else + QByteArray ba = "T05"; + appendRegister(&ba, RegisterPSGdb, addr); + sendGdbServerMessage(ba, "Registers"); + #endif #endif break; } @@ -1187,7 +1195,15 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result) + ",TextSeg=" + hexNumber(lib.codeseg) + ",DataSeg=" + hexNumber(lib.dataseg) + ';'); */ - sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE"); + + // After 'continue' the very first time after starting debugging + // a process some library load events are generated, these are + // actually static dependencies for the process. For these libraries, + // the thread id is -1 which means the debugger doesn't have + // to continue. The debugger can safely assume that the + // thread resumption will be handled by the agent itself. + if (tid != unsigned(-1)) + sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE"); break; } case 0xa1: { // NotifyDeleted @@ -1465,7 +1481,7 @@ void TrkGdbAdapter::tryAnswerGdbMemoryRequest(bool buffered) return; } } - // Happens when chunks are not comnbined + // Happens when chunks are not combined QTC_ASSERT(false, /**/); debugMessage("CHUNKS NOT COMBINED"); #ifdef MEMORY_DEBUG @@ -1794,7 +1810,8 @@ void TrkGdbAdapter::handleCreateProcess(const TrkResult &result) logMessage(startMsg); - if (m_symbolFile.isEmpty()) { + const QByteArray symbolFile = m_symbolFile.toLocal8Bit(); + if (symbolFile.isEmpty()) { logMessage(_("WARNING: No symbol file available.")); } else { // Does not seem to be necessary anymore. @@ -1802,7 +1819,7 @@ void TrkGdbAdapter::handleCreateProcess(const TrkResult &result) // have to wait for the TRK startup to learn the load address. //m_engine->postCommand("add-symbol-file \"" + symbolFile + "\" " // + QByteArray::number(m_session.codeseg)); - m_engine->postCommand("symbol-file \"" + m_symbolFile.toLatin1() + "\""); + m_engine->postCommand("symbol-file \"" + symbolFile + "\""); } m_engine->postCommand("set breakpoint always-inserted on"); m_engine->postCommand("set trust-readonly-sections"); // No difference?