aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-01-21 15:51:33 +0100
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-01-21 15:51:33 +0100
commit713be02ab73f9b905640672ce6fe9b92befa3f1e (patch)
treee9f8979a6d4be51f017fe802b1e3d8a9148a4ec5
parentbd0d6fb22fd918ae3a4bc72d355d104683ca7fa7 (diff)
S60: Handle TrkNotifyStopped (crash) when running.
Extract error message string from Trk, print proper message when application crashes in run mode and terminate launcher. Use same message in Debugger for consistency. Reviewed-by: Robert Loehning <robert.loehning@nokia.com>Reviewed-by: John Doe Conflicts: src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
-rw-r--r--src/plugins/debugger/gdb/trkgdbadapter.cpp19
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp8
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h1
-rw-r--r--tests/manual/trklauncher/main.cpp2
4 files changed, 22 insertions, 8 deletions
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 77c4ac9359..b129beb1ab 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -28,6 +28,7 @@
**************************************************************************/
#include "trkgdbadapter.h"
+#include "launcher.h"
#include "trkoptions.h"
#include "trkoptionspage.h"
#include "s60debuggerbluetoothstarter.h"
@@ -991,16 +992,18 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
logMessage(logMsg);
break;
}
- case 0x90: { // Notified Stopped
+ case TrkNotifyStopped: { // Notified Stopped
// 90 01 78 6a 40 40 00 00 07 23 00 00 07 24 00 00
debugMessage(_("RESET SNAPSHOT (NOTIFY STOPPED)"));
m_snapshot.reset();
- const char *data = result.data.data();
- const uint addr = extractInt(data);
- const uint pid = extractInt(data + 4);
- const uint tid = extractInt(data + 8);
- logMessage(prefix + _("NOTE: PID %1/TID %2 "
- "STOPPED at 0x%3").arg(pid).arg(tid).arg(addr, 0, 16));
+ QString reason;
+ uint addr;
+ uint pid;
+ uint tid;
+ trk::Launcher::parseNotifyStopped(result.data, &pid, &tid, &addr, &reason);
+ const QString msg = trk::Launcher::msgStopped(pid, tid, addr, reason);
+ logMessage(prefix + msg);
+ m_engine->manager()->showDebuggerOutput(LogMisc, msg);
sendTrkAck(result.token);
if (addr) {
// Todo: Do not send off GdbMessages if a synced gdb
@@ -1019,7 +1022,7 @@ void TrkGdbAdapter::handleTrkResult(const TrkResult &result)
trkReadRegistersMessage());
break;
}
- case 0x91: { // Notify Exception (obsolete)
+ case TrkNotifyException: { // Notify Exception (obsolete)
debugMessage(_("RESET SNAPSHOT (NOTIFY EXCEPTION)"));
m_snapshot.reset();
logMessage(prefix + "NOTE: EXCEPTION " + str);
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 94dfb99aec..e230758e15 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -602,6 +602,8 @@ void S60DeviceRunControlBase::signsisProcessFinished()
connect(m_launcher, SIGNAL(canNotInstall(QString,QString)), this, SLOT(printInstallFailed(QString,QString)));
connect(m_launcher, SIGNAL(copyProgress(int)), this, SLOT(printCopyProgress(int)));
connect(m_launcher, SIGNAL(stateChanged(int)), this, SLOT(slotLauncherStateChanged(int)));
+ connect(m_launcher, SIGNAL(processStopped(uint,uint,uint,QString)),
+ this, SLOT(processStopped(uint,uint,uint,QString)));
//TODO sisx destination and file path user definable
m_launcher->setTrkServerName(m_serialPortName);
@@ -688,6 +690,12 @@ void S60DeviceRunControlBase::launcherFinished()
handleLauncherFinished();
}
+void S60DeviceRunControlBase::processStopped(uint pc, uint pid, uint tid, const QString& reason)
+{
+ emit addToOutputWindow(this, trk::Launcher::msgStopped(pid, tid, pc, reason));
+ m_launcher->terminate();
+}
+
QMessageBox *S60DeviceRunControlBase::createTrkWaitingMessageBox(const QString &port, QWidget *parent)
{
const QString title = QCoreApplication::translate("Qt4ProjectManager::Internal::S60DeviceRunControlBase",
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index 04616bf109..52fa3ed200 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -155,6 +155,7 @@ protected slots:
void printApplicationOutput(const QString &output);
private slots:
+ void processStopped(uint pc, uint pid, uint tid, const QString& reason);
void readStandardError();
void readStandardOutput();
void makesisProcessFailed();
diff --git a/tests/manual/trklauncher/main.cpp b/tests/manual/trklauncher/main.cpp
index 9938f84793..fc0c589009 100644
--- a/tests/manual/trklauncher/main.cpp
+++ b/tests/manual/trklauncher/main.cpp
@@ -136,6 +136,8 @@ int main(int argc, char *argv[])
return 1;
}
QObject::connect(launcher.data(), SIGNAL(finished()), &app, SLOT(quit()));
+ QObject::connect(launcher.data(), SIGNAL(processStopped(uint,uint,uint,QString)),
+ launcher.data(), SLOT(terminate()));
// BLuetooth: Open with prompt
QString errorMessage;
if (bluetooth && !trk::ConsoleBluetoothStarter::startBluetooth(launcher->trkDevice(),