Commit c516f350 authored by Friedemann Kleint's avatar Friedemann Kleint
Browse files

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
parent 53c672fb
......@@ -28,6 +28,7 @@
**************************************************************************/
#include "trkgdbadapter.h"
#include "launcher.h"
#include "trkoptions.h"
#include "trkoptionspage.h"
#include "s60debuggerbluetoothstarter.h"
......@@ -1054,16 +1055,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
......@@ -1082,7 +1085,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);
......
......@@ -669,6 +669,8 @@ void S60DeviceRunControlBase::startDeployment()
connect(m_launcher, SIGNAL(installingFinished()), this, SLOT(printInstallingFinished()));
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);
......@@ -775,6 +777,12 @@ void S60DeviceRunControlBase::reportDeployFinished()
}
}
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",
......
......@@ -169,6 +169,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();
......
......@@ -147,6 +147,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(),
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment