From 700bfa6339b9f788985d9ccc7515c6ea47c78239 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Thu, 10 Sep 2009 13:59:21 +0200
Subject: [PATCH] debugger: work on trk integration

---
 .../debugger/symbian/symbianadapter.cpp       | 107 ++----------------
 src/plugins/debugger/symbian/symbianadapter.h |   5 -
 tests/manual/trk/runner.cpp                   |  41 ++++++-
 3 files changed, 47 insertions(+), 106 deletions(-)

diff --git a/src/plugins/debugger/symbian/symbianadapter.cpp b/src/plugins/debugger/symbian/symbianadapter.cpp
index b13447499f7..2184e6b7390 100644
--- a/src/plugins/debugger/symbian/symbianadapter.cpp
+++ b/src/plugins/debugger/symbian/symbianadapter.cpp
@@ -71,7 +71,7 @@ SymbianAdapter::SymbianAdapter()
 {
     m_running = false;
     m_gdbAckMode = true;
-    m_verbose = 2;
+    m_verbose = 0;
     m_serialFrame = false;
     m_bufferedMemoryRead = true;
     m_rfcommDevice = "/dev/rfcomm0";
@@ -82,9 +82,9 @@ SymbianAdapter::SymbianAdapter()
     m_gdbProc.setObjectName("GDB PROCESS");
     connectProcess(&m_gdbProc);
     connect(&m_gdbProc, SIGNAL(readyReadStandardError()),
-        this, SLOT(handleGdbReadyReadStandardError()));
+        this, SIGNAL(readyReadStandardError()));
     connect(&m_gdbProc, SIGNAL(readyReadStandardOutput()),
-        this, SLOT(handleGdbReadyReadStandardOutput()));
+        this, SIGNAL(readyReadStandardOutput()));
 
     m_rfcommProc.setObjectName("RFCOMM PROCESS");
     connectProcess(&m_rfcommProc);
@@ -167,7 +167,7 @@ void SymbianAdapter::startInferior()
 {
     QString errorMessage;
     if (!m_trkDevice.open(m_rfcommDevice, &errorMessage)) {
-        logMessage("LOOPING");
+        emit output("LOOPING");
         QTimer::singleShot(1000, this, SLOT(startInferior()));
         return;
     }
@@ -427,7 +427,6 @@ void SymbianAdapter::handleGdbServerCommand(const QByteArray &cmd)
     else if (cmd.startsWith("D")) {
         sendGdbServerAck();
         sendGdbServerMessage("OK", "shutting down");
-        qApp->quit();
     }
 
     else if (cmd == "g") {
@@ -1332,7 +1331,7 @@ void SymbianAdapter::startGdb()
     if (!m_gdbServer.listen(QHostAddress(gdbServerIP()), gdbServerPort())) {
         logMessage(QString("Unable to start the gdb server at %1: %2.")
             .arg(m_gdbServerName).arg(m_gdbServer.errorString()));
-        QCoreApplication::exit(5);
+        //emit startFailed();
         return;
     }
 
@@ -1361,47 +1360,19 @@ void SymbianAdapter::startGdb()
     //sendGdbMessage("set remote noack-packet");
 
     // FIXME: creates a lot of noise a la  '&"putpkt: Junk: Ack " &'
-    // even thouhg the communication seems sane
+    // even though the communication seems sane
     //sendGdbMessage("set debug remote 1"); // creates l
 
-    //sendGdbMessage("target remote " + m_gdbServerName);
-//    sendGdbMessage("target extended-remote " + m_gdbServerName);
-    //sendGdbMessage("target extended-async " + m_gdbServerName);
-    //sendGdbMessage("set remotecache ...") // Set cache use for remote targets 
-    //sendGdbMessage("file filebrowseapp.sym");
-//    sendGdbMessage("add-symbol-file filebrowseapp.sym " + m_baseAddress);
-//    sendGdbMessage("symbol-file filebrowseapp.sym");
-//    sendGdbMessage("print E32Main");
-//    sendGdbMessage("break E32Main");
-    //sendGdbMessage("continue");
-    //sendGdbMessage("info files");
-    //sendGdbMessage("file filebrowseapp.sym -readnow");
-
     sendGdbMessage("add-symbol-file filebrowseapp.sym "
         + hexxNumber(m_session.codeseg));
     sendGdbMessage("symbol-file filebrowseapp.sym");
 
-    // -symbol-info-address not implemented in cs-gdb 6.4-6.8 (at least)
-    //sendGdbMessage("info address E32Main",
-    //    GdbCB(handleInfoMainAddress)); 
     //sendGdbMessage("info address CFileBrowseAppUi::HandleCommandL",
     //    GdbCB(handleInfoMainAddress)); 
         
-#if 0
-    // FIXME: Gdb based version. That's the goal
-    //sendGdbMessage("break E32Main");
-    //sendGdbMessage("continue");
-    //sendTrkMessage(0x18, TrkCB(handleContinueAfterCreateProcess), 
-    // trkContinueMessage(), "CONTINUE");
-#else
-    // Directly talk to TRK. Works for now...
-    //sendGdbMessage("break E32Main");
-    sendGdbMessage("-break-insert E32Main");
     sendGdbMessage("-break-insert filebrowseappui.cpp:39");
     sendGdbMessage("target remote " + m_gdbServerName);
-    //sendGdbMessage("break filebrowseappui.cpp:39");
-   //         sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE");
-#endif
+    //sendGdbMessage("-exec-continue");
 }
 
 void SymbianAdapter::sendGdbMessage(const QString &msg, GdbCallback callback,
@@ -1418,64 +1389,6 @@ void SymbianAdapter::sendGdbMessage(const QString &msg, GdbCallback callback,
     m_gdbProc.write(QString("%1%2\n").arg(token).arg(msg).toLatin1());
 }
 
-void SymbianAdapter::handleGdbReadyReadStandardError()
-{
-    QByteArray ba = qobject_cast<QProcess *>(sender())->readAllStandardError();
-    sendOutput(sender(), QString("stderr: %1").arg(QString::fromLatin1(ba)));
-}
-
-void SymbianAdapter::handleGdbReadyReadStandardOutput()
-{
-    QByteArray ba = qobject_cast<QProcess *>(sender())->readAllStandardOutput();
-    QString str = QString::fromLatin1(ba);
-    // FIXME: fragile. merge with gdbengine logic
-#if 0
-    QRegExp re(QString(".*([0-9]+)[^]done.*"));
-    int pos = re.indexIn(str);
-    if (pos == -1) {
-        logMessage(QString("\n-> GDB: %1 %**% %2 %**%\n").arg(str).arg(pos));
-        return;
-    }
-    int token = re.cap(1).toInt();
-    logMessage(QString("\n-> GDB: %1 %2##\n").arg(token).arg(QString::fromLatin1(ba)));
-    if (!token)
-        return;
-    GdbCommand cmd = m_gdbCookieForToken.take(token);
-    logMessage("FOUND CALLBACK FOR " + cmd.command);
-    GdbResult result;
-    result.data = ba;
-    if (!cmd.callback.isNull())
-        cmd.callback(result);
-#else
-/*
-    bool ok;
-    QRegExp re(QString("Symbol .._Z7E32Mainv.. is a function at address 0x(.*)\\."));
-    if (re.indexIn(str) != -1) {
-        logMessage(QString("-> GDB MAIN BREAKPOINT: %1").arg(re.cap(1)));
-        uint addr = re.cap(1).toInt(&ok, 16);
-        sendTrkMessage(0x1B, TrkCallback(), trkBreakpointMessage(addr, 1));
-        return;
-    }
-    QRegExp re1(QString("Symbol .._ZN16CFileBrowseAppUi14HandleCommandLEi.. is a function at address 0x(.*)\\."));
-    if (re1.indexIn(str) != -1) {
-        logMessage(QString("-> GDB USER BREAKPOINT: %1").arg(re1.cap(1)));
-        uint addr = re1.cap(1).toInt(&ok, 16);
-        sendTrkMessage(0x1B, TrkCallback(), trkBreakpointMessage(addr, 1));
-
-        sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE");
-        sendGdbMessage("target remote " + m_gdbServerName);
-        return;
-    }
-*/
-    logMessage(QString("-> GDB: %1").arg(str));
-#endif
-}
-
-void SymbianAdapter::handleInfoMainAddress(const GdbResult &result)
-{
-    Q_UNUSED(result);
-}
-
 void SymbianAdapter::handleSetTrkMainBreakpoint(const TrkResult &result)
 {
     Q_UNUSED(result);
@@ -1488,12 +1401,6 @@ void SymbianAdapter::handleSetTrkMainBreakpoint(const TrkResult &result)
 */
 }
 
-void SymbianAdapter::handleInfoAddress(const GdbResult &result)
-{
-    Q_UNUSED(result);
-    // FIXME
-}
-
 void SymbianAdapter::handleRfcommReadyReadStandardError()
 {
     QByteArray ba = qobject_cast<QProcess *>(sender())->readAllStandardError();
diff --git a/src/plugins/debugger/symbian/symbianadapter.h b/src/plugins/debugger/symbian/symbianadapter.h
index da6c0735ab3..0980112dce3 100644
--- a/src/plugins/debugger/symbian/symbianadapter.h
+++ b/src/plugins/debugger/symbian/symbianadapter.h
@@ -211,14 +211,9 @@ public:
     void sendGdbServerAck();
     bool sendGdbServerPacket(const QByteArray &packet, bool doFlush);
 
-    Q_SLOT void handleGdbReadyReadStandardError();
-    Q_SLOT void handleGdbReadyReadStandardOutput();
     void logMessage(const QString &msg);  // triggers output() if m_verbose
     Q_SLOT void trkLogMessage(const QString &msg);
 
-    void handleInfoAddress(const GdbResult &result);
-    void handleInfoMainAddress(const GdbResult &result);
-
     QTcpServer m_gdbServer;
     QPointer<QTcpSocket> m_gdbConnection;
     QByteArray m_gdbReadBuffer;
diff --git a/tests/manual/trk/runner.cpp b/tests/manual/trk/runner.cpp
index b43118f4b25..aaa3b984b47 100755
--- a/tests/manual/trk/runner.cpp
+++ b/tests/manual/trk/runner.cpp
@@ -107,6 +107,12 @@ private slots:
     void executeContinueCommand() { executeCommand("-exec-continue"); }
     void executeDisassICommand() { executeCommand("disass $pc $pc+4"); }
 
+    void handleReadyReadStandardError();
+    void handleReadyReadStandardOutput();
+
+    void run();
+    void started();
+
 private:
     void executeCommand(const QString &cmd) { m_adapter->executeCommand(cmd); }
     void connectAction(QAction *&, QString name, const char *slot);
@@ -141,6 +147,13 @@ RunnerGui::RunnerGui(SymbianAdapter *adapter)
         &m_textEdit, SLOT(handleOutput(QString)));
     connect(&m_textEdit, SIGNAL(executeCommand(QString)),
         m_adapter, SLOT(executeCommand(QString)));
+
+    connect(adapter, SIGNAL(readyReadStandardError()),
+        this, SLOT(handleReadyReadStandardError()));
+    connect(adapter, SIGNAL(readyReadStandardOutput()),
+        this, SLOT(handleReadyReadStandardOutput()));
+    connect(adapter, SIGNAL(started()),
+        this, SLOT(started()));
 }
 
 void RunnerGui::connectAction(QAction *&action, QString name, const char *slot)
@@ -151,6 +164,31 @@ void RunnerGui::connectAction(QAction *&action, QString name, const char *slot)
     connect(action, SIGNAL(triggered()), this, slot);
 }
 
+void RunnerGui::handleReadyReadStandardError()
+{
+    QByteArray ba = m_adapter->readAllStandardError();
+    qDebug() << ba;
+    m_textEdit.handleOutput(ba);
+}
+
+void RunnerGui::handleReadyReadStandardOutput()
+{
+    QByteArray ba = m_adapter->readAllStandardOutput();
+    qDebug() << ba;
+    m_textEdit.handleOutput("-> GDB: " + ba);
+}
+
+void RunnerGui::run()
+{
+    m_adapter->run();
+}
+
+void RunnerGui::started()
+{
+    qDebug() << "\nSTARTED\n";
+    m_adapter->sendGdbMessage("-exec-continue");
+}
+
 ///////////////////////////////////////////////////////////////////////
 //
 // main
@@ -161,9 +199,10 @@ int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     SymbianAdapter adapter;
+    adapter.setVerbose(2);
     RunnerGui gui(&adapter);
     gui.show();
-    QTimer::singleShot(0, &adapter, SLOT(run()));
+    QTimer::singleShot(0, &gui, SLOT(run()));
     return app.exec();
 }
 
-- 
GitLab