forked from qt-creator/qt-creator
QmlDebugger: Refactor QML Signal Handler
Refactor QML Signal Handler to QML Signal Emit. This is because the debugger breaks when a matching signal is emitted irrespective of whether there is a handler connected to the signal. Change-Id: I852ace75c1962290717ed127ac5938d7505b9a7e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
@@ -122,8 +122,8 @@ static QString typeToString(BreakpointType type)
|
|||||||
return BreakHandler::tr("Watchpoint at Address");
|
return BreakHandler::tr("Watchpoint at Address");
|
||||||
case WatchpointAtExpression:
|
case WatchpointAtExpression:
|
||||||
return BreakHandler::tr("Watchpoint at Expression");
|
return BreakHandler::tr("Watchpoint at Expression");
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
return BreakHandler::tr("Breakpoint on QML Signal Handler");
|
return BreakHandler::tr("Breakpoint on QML Signal Emit");
|
||||||
case BreakpointAtJavaScriptThrow:
|
case BreakpointAtJavaScriptThrow:
|
||||||
return BreakHandler::tr("Breakpoint at JavaScript throw");
|
return BreakHandler::tr("Breakpoint at JavaScript throw");
|
||||||
case UnknownType:
|
case UnknownType:
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ bool BreakpointParameters::isValid() const
|
|||||||
case Debugger::Internal::BreakpointAtFork:
|
case Debugger::Internal::BreakpointAtFork:
|
||||||
case Debugger::Internal::BreakpointAtExec:
|
case Debugger::Internal::BreakpointAtExec:
|
||||||
case Debugger::Internal::BreakpointAtSysCall:
|
case Debugger::Internal::BreakpointAtSysCall:
|
||||||
case Debugger::Internal::BreakpointOnQmlSignalHandler:
|
case Debugger::Internal::BreakpointOnQmlSignalEmit:
|
||||||
case Debugger::Internal::BreakpointAtJavaScriptThrow:
|
case Debugger::Internal::BreakpointAtJavaScriptThrow:
|
||||||
break;
|
break;
|
||||||
case Debugger::Internal::WatchpointAtExpression:
|
case Debugger::Internal::WatchpointAtExpression:
|
||||||
@@ -280,7 +280,7 @@ bool BreakpointParameters::isCppBreakpoint() const
|
|||||||
{
|
{
|
||||||
// Qml specific breakpoint types.
|
// Qml specific breakpoint types.
|
||||||
if (type == BreakpointAtJavaScriptThrow
|
if (type == BreakpointAtJavaScriptThrow
|
||||||
|| type == BreakpointOnQmlSignalHandler)
|
|| type == BreakpointOnQmlSignalEmit)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Qml is currently only file.
|
// Qml is currently only file.
|
||||||
@@ -302,7 +302,7 @@ QString BreakpointParameters::toString() const
|
|||||||
<< " PathUsage: " << pathUsage;
|
<< " PathUsage: " << pathUsage;
|
||||||
break;
|
break;
|
||||||
case BreakpointByFunction:
|
case BreakpointByFunction:
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
ts << " FunctionName: " << functionName;
|
ts << " FunctionName: " << functionName;
|
||||||
break;
|
break;
|
||||||
case BreakpointByAddress:
|
case BreakpointByAddress:
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ enum BreakpointType
|
|||||||
BreakpointAtSysCall,
|
BreakpointAtSysCall,
|
||||||
WatchpointAtAddress,
|
WatchpointAtAddress,
|
||||||
WatchpointAtExpression,
|
WatchpointAtExpression,
|
||||||
BreakpointOnQmlSignalHandler,
|
BreakpointOnQmlSignalEmit,
|
||||||
BreakpointAtJavaScriptThrow
|
BreakpointAtJavaScriptThrow
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ BreakpointDialog::BreakpointDialog(BreakpointModelId id, QWidget *parent)
|
|||||||
<< tr("Break when a system call is executed")
|
<< tr("Break when a system call is executed")
|
||||||
<< tr("Break on data access at fixed address")
|
<< tr("Break on data access at fixed address")
|
||||||
<< tr("Break on data access at address given by expression")
|
<< tr("Break on data access at address given by expression")
|
||||||
<< tr("Break on QML signal handler")
|
<< tr("Break on QML signal emit")
|
||||||
<< tr("Break when JavaScript exception is thrown");
|
<< tr("Break when JavaScript exception is thrown");
|
||||||
|
|
||||||
QTC_ASSERT(types.size() == BreakpointAtJavaScriptThrow, return);
|
QTC_ASSERT(types.size() == BreakpointAtJavaScriptThrow, return);
|
||||||
@@ -374,7 +374,7 @@ void BreakpointDialog::typeChanged(int)
|
|||||||
case WatchpointAtExpression:
|
case WatchpointAtExpression:
|
||||||
getParts(ExpressionPart|AllConditionParts|TracePointPart, &m_savedParameters);
|
getParts(ExpressionPart|AllConditionParts|TracePointPart, &m_savedParameters);
|
||||||
break;
|
break;
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
getParts(FunctionPart, &m_savedParameters);
|
getParts(FunctionPart, &m_savedParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,7 +421,7 @@ void BreakpointDialog::typeChanged(int)
|
|||||||
setPartsEnabled(ExpressionPart|AllConditionParts|TracePointPart|TracePointPart);
|
setPartsEnabled(ExpressionPart|AllConditionParts|TracePointPart|TracePointPart);
|
||||||
clearOtherParts(ExpressionPart|AllConditionParts|TracePointPart);
|
clearOtherParts(ExpressionPart|AllConditionParts|TracePointPart);
|
||||||
break;
|
break;
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
setParts(FunctionPart, m_savedParameters);
|
setParts(FunctionPart, m_savedParameters);
|
||||||
setPartsEnabled(FunctionPart);
|
setPartsEnabled(FunctionPart);
|
||||||
clearOtherParts(FunctionPart);
|
clearOtherParts(FunctionPart);
|
||||||
|
|||||||
@@ -2604,7 +2604,7 @@ bool CdbEngine::acceptsBreakpoint(BreakpointModelId id) const
|
|||||||
case BreakpointAtFork:
|
case BreakpointAtFork:
|
||||||
case WatchpointAtExpression:
|
case WatchpointAtExpression:
|
||||||
case BreakpointAtSysCall:
|
case BreakpointAtSysCall:
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
case BreakpointAtJavaScriptThrow:
|
case BreakpointAtJavaScriptThrow:
|
||||||
return false;
|
return false;
|
||||||
case WatchpointAtAddress:
|
case WatchpointAtAddress:
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ static BreakpointParameters fixWinMSVCBreakpoint(const BreakpointParameters &p)
|
|||||||
case WatchpointAtExpression:
|
case WatchpointAtExpression:
|
||||||
case BreakpointAtSysCall:
|
case BreakpointAtSysCall:
|
||||||
case WatchpointAtAddress:
|
case WatchpointAtAddress:
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
case BreakpointAtJavaScriptThrow:
|
case BreakpointAtJavaScriptThrow:
|
||||||
break;
|
break;
|
||||||
case BreakpointAtExec: { // Emulate by breaking on CreateProcessW().
|
case BreakpointAtExec: { // Emulate by breaking on CreateProcessW().
|
||||||
@@ -164,7 +164,7 @@ QByteArray cdbAddBreakpointCommand(const BreakpointParameters &bpIn,
|
|||||||
case BreakpointAtCatch:
|
case BreakpointAtCatch:
|
||||||
case BreakpointAtThrow:
|
case BreakpointAtThrow:
|
||||||
case BreakpointAtMain:
|
case BreakpointAtMain:
|
||||||
case BreakpointOnQmlSignalHandler:
|
case BreakpointOnQmlSignalEmit:
|
||||||
case BreakpointAtJavaScriptThrow:
|
case BreakpointAtJavaScriptThrow:
|
||||||
QTC_ASSERT(false, return QByteArray(); )
|
QTC_ASSERT(false, return QByteArray(); )
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -538,8 +538,8 @@ void QmlV8DebuggerClientPrivate::setBreakpoint(const QString type, const QString
|
|||||||
QByteArray params;
|
QByteArray params;
|
||||||
QDataStream rs(¶ms, QIODevice::WriteOnly);
|
QDataStream rs(¶ms, QIODevice::WriteOnly);
|
||||||
rs << target.toUtf8() << enabled;
|
rs << target.toUtf8() << enabled;
|
||||||
logSendMessage(QString(_("%1 %2 %3 %4")).arg(_(V8DEBUG), _(SIGNALHANDLER), target, enabled?_("enabled"):_("disabled")));
|
logSendMessage(QString(_("%1 %2 %3 %4")).arg(_(V8DEBUG), _(BREAKONSIGNAL), target, enabled?_("enabled"):_("disabled")));
|
||||||
q->sendMessage(packMessage(SIGNALHANDLER, params));
|
q->sendMessage(packMessage(BREAKONSIGNAL, params));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
QScriptValue jsonVal = initObject();
|
QScriptValue jsonVal = initObject();
|
||||||
@@ -966,7 +966,7 @@ void QmlV8DebuggerClientPrivate::reformatRequest(QByteArray &request)
|
|||||||
}
|
}
|
||||||
q->sendMessage(packMessage(QByteArray(), data));
|
q->sendMessage(packMessage(QByteArray(), data));
|
||||||
|
|
||||||
} else if (command == SIGNALHANDLER) {
|
} else if (command == BREAKONSIGNAL) {
|
||||||
QDataStream rs(data);
|
QDataStream rs(data);
|
||||||
QByteArray signalHandler;
|
QByteArray signalHandler;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
@@ -1091,7 +1091,7 @@ void QmlV8DebuggerClient::activateFrame(int index)
|
|||||||
bool QmlV8DebuggerClient::acceptsBreakpoint(const BreakpointModelId &id)
|
bool QmlV8DebuggerClient::acceptsBreakpoint(const BreakpointModelId &id)
|
||||||
{
|
{
|
||||||
BreakpointType type = d->engine->breakHandler()->breakpointData(id).type;
|
BreakpointType type = d->engine->breakHandler()->breakpointData(id).type;
|
||||||
return (type == BreakpointOnQmlSignalHandler
|
return (type == BreakpointOnQmlSignalEmit
|
||||||
|| type == BreakpointByFileAndLine
|
|| type == BreakpointByFileAndLine
|
||||||
|| type == BreakpointAtJavaScriptThrow);
|
|| type == BreakpointAtJavaScriptThrow);
|
||||||
}
|
}
|
||||||
@@ -1112,7 +1112,7 @@ void QmlV8DebuggerClient::insertBreakpoint(const BreakpointModelId &id,
|
|||||||
params.enabled, adjustedLine, adjustedColumn,
|
params.enabled, adjustedLine, adjustedColumn,
|
||||||
QLatin1String(params.condition), params.ignoreCount);
|
QLatin1String(params.condition), params.ignoreCount);
|
||||||
|
|
||||||
} else if (params.type == BreakpointOnQmlSignalHandler) {
|
} else if (params.type == BreakpointOnQmlSignalEmit) {
|
||||||
d->setBreakpoint(QString(_(EVENT)), params.functionName, params.enabled);
|
d->setBreakpoint(QString(_(EVENT)), params.functionName, params.enabled);
|
||||||
d->engine->breakHandler()->notifyBreakpointInsertOk(id);
|
d->engine->breakHandler()->notifyBreakpointInsertOk(id);
|
||||||
}
|
}
|
||||||
@@ -1130,7 +1130,7 @@ void QmlV8DebuggerClient::removeBreakpoint(const BreakpointModelId &id)
|
|||||||
|
|
||||||
if (params.type == BreakpointAtJavaScriptThrow)
|
if (params.type == BreakpointAtJavaScriptThrow)
|
||||||
d->setExceptionBreak(AllExceptions);
|
d->setExceptionBreak(AllExceptions);
|
||||||
else if (params.type == BreakpointOnQmlSignalHandler)
|
else if (params.type == BreakpointOnQmlSignalEmit)
|
||||||
d->setBreakpoint(QString(_(EVENT)), params.functionName, false);
|
d->setBreakpoint(QString(_(EVENT)), params.functionName, false);
|
||||||
else
|
else
|
||||||
d->clearBreakpoint(breakpoint);
|
d->clearBreakpoint(breakpoint);
|
||||||
@@ -1146,7 +1146,7 @@ void QmlV8DebuggerClient::changeBreakpoint(const BreakpointModelId &id)
|
|||||||
d->setExceptionBreak(AllExceptions, params.enabled);
|
d->setExceptionBreak(AllExceptions, params.enabled);
|
||||||
br.enabled = params.enabled;
|
br.enabled = params.enabled;
|
||||||
handler->setResponse(id, br);
|
handler->setResponse(id, br);
|
||||||
} else if (params.type == BreakpointOnQmlSignalHandler) {
|
} else if (params.type == BreakpointOnQmlSignalEmit) {
|
||||||
d->setBreakpoint(QString(_(EVENT)), params.functionName, params.enabled);
|
d->setBreakpoint(QString(_(EVENT)), params.functionName, params.enabled);
|
||||||
br.enabled = params.enabled;
|
br.enabled = params.enabled;
|
||||||
handler->setResponse(id, br);
|
handler->setResponse(id, br);
|
||||||
@@ -1259,7 +1259,7 @@ void QmlV8DebuggerClient::messageReceived(const QByteArray &data)
|
|||||||
} else if (type == INTERRUPT) {
|
} else if (type == INTERRUPT) {
|
||||||
//debug break requested
|
//debug break requested
|
||||||
|
|
||||||
} else if (type == SIGNALHANDLER) {
|
} else if (type == BREAKONSIGNAL) {
|
||||||
//break on signal handler requested
|
//break on signal handler requested
|
||||||
|
|
||||||
} else if (type == V8MESSAGE) {
|
} else if (type == V8MESSAGE) {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace Internal {
|
|||||||
const float CURRENT_SUPPORTED_VERSION = 2.0;
|
const float CURRENT_SUPPORTED_VERSION = 2.0;
|
||||||
const char V8REQUEST[] = "v8request";
|
const char V8REQUEST[] = "v8request";
|
||||||
const char V8MESSAGE[] = "v8message";
|
const char V8MESSAGE[] = "v8message";
|
||||||
const char SIGNALHANDLER[] = "signalhandler";
|
const char BREAKONSIGNAL[] = "breakonsignal";
|
||||||
const char CONNECT[] = "connect";
|
const char CONNECT[] = "connect";
|
||||||
const char INTERRUPT[] = "interrupt";
|
const char INTERRUPT[] = "interrupt";
|
||||||
const char V8DEBUG[] = "V8DEBUG";
|
const char V8DEBUG[] = "V8DEBUG";
|
||||||
|
|||||||
Reference in New Issue
Block a user