diff options
author | Aurindam Jana <aurindam.jana@nokia.com> | 2011-10-10 15:25:18 +0200 |
---|---|---|
committer | Aurindam Jana <aurindam.jana@nokia.com> | 2011-10-11 11:25:34 +0200 |
commit | 32ef6c563d41623956e2419d149e9f83ce422394 (patch) | |
tree | e83b81bfd7d390150acaf55eb8e07ebfdf72b621 /src/plugins/debugger/qml/qmlv8debuggerclient.cpp | |
parent | f1db83be8be50b48ac1db80640b66e7f2b67d4c1 (diff) | |
download | qt-creator-32ef6c563d41623956e2419d149e9f83ce422394.tar.gz |
V8DebuggerClient: Enable breakpoints on Exceptions
Previously break on exceptions was always enabled. Now, the user
can add a breakpoint on Javascript Exceptions from the breakpoint
window in the debugger.
Change-Id: Ia9ee813d2fccf89b607fe1dcbad47b4084155a48
Reviewed-on: http://codereview.qt-project.org/6348
Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
Diffstat (limited to 'src/plugins/debugger/qml/qmlv8debuggerclient.cpp')
-rw-r--r-- | src/plugins/debugger/qml/qmlv8debuggerclient.cpp | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp index b0b7c59e12..33d4353d41 100644 --- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp +++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp @@ -279,10 +279,6 @@ void QmlV8DebuggerClient::interruptInferior() void QmlV8DebuggerClient::startSession() { - //Set up Exception Handling first - //TODO: For now we enable breaks for all exceptions - breakOnException(AllExceptions, true); - QByteArray request; JsonInputStream(request) << '{' << INITIALPARAMS ; @@ -315,28 +311,39 @@ void QmlV8DebuggerClient::activateFrame(int index) bool QmlV8DebuggerClient::acceptsBreakpoint(const BreakpointModelId &id) { BreakpointType type = d->engine->breakHandler()->breakpointData(id).type; - return (type == BreakpointOnQmlSignalHandler || type == BreakpointByFunction); + return (type == BreakpointOnQmlSignalHandler + || type == BreakpointByFunction + || type == BreakpointAtJavaScriptThrow); } void QmlV8DebuggerClient::insertBreakpoint(const BreakpointModelId &id) { BreakHandler *handler = d->engine->breakHandler(); + const BreakpointParameters ¶ms = handler->breakpointData(id); + + if (params.type == BreakpointAtJavaScriptThrow) { + handler->notifyBreakpointInsertOk(id); + return breakOnException(AllExceptions, params.enabled); + } + QByteArray request; JsonInputStream(request) << '{' << INITIALPARAMS ; JsonInputStream(request) << ',' << "command" << ':' << "setbreakpoint"; JsonInputStream(request) << ',' << "arguments" << ':' << '{'; - if (handler->breakpointData(id).type == BreakpointByFileAndLine) { + if (params.type == BreakpointByFileAndLine) { JsonInputStream(request) << "type" << ':' << "script"; - JsonInputStream(request) << ',' << "target" << ':' << QFileInfo(handler->fileName(id)).fileName().toUtf8(); - JsonInputStream(request) << ',' << "line" << ':' << handler->lineNumber(id) - 1; - } else if (handler->breakpointData(id).type == BreakpointByFunction) { + JsonInputStream(request) << ',' << "target" << ':' << QFileInfo(params.fileName).fileName().toUtf8(); + JsonInputStream(request) << ',' << "line" << ':' << params.lineNumber - 1; + } else if (params.type == BreakpointByFunction) { JsonInputStream(request) << "type" << ':' << "function"; - JsonInputStream(request) << ',' << "target" << ':' << handler->functionName(id).toUtf8(); - } else if (handler->breakpointData(id).type == BreakpointOnQmlSignalHandler) { + JsonInputStream(request) << ',' << "target" << ':' << params.functionName.toUtf8(); + } else if (params.type == BreakpointOnQmlSignalHandler) { JsonInputStream(request) << "type" << ':' << "event"; - JsonInputStream(request) << ',' << "target" << ':' << handler->functionName(id).toUtf8(); + JsonInputStream(request) << ',' << "target" << ':' << params.functionName.toUtf8(); } + JsonInputStream(request) << ',' << "enabled" << ':' << params.enabled; + JsonInputStream(request) << '}'; JsonInputStream(request) << '}'; @@ -346,6 +353,12 @@ void QmlV8DebuggerClient::insertBreakpoint(const BreakpointModelId &id) void QmlV8DebuggerClient::removeBreakpoint(const BreakpointModelId &id) { + BreakHandler *handler = d->engine->breakHandler(); + + if (handler->breakpointData(id).type == BreakpointAtJavaScriptThrow) { + return breakOnException(AllExceptions, false); + } + int breakpoint = d->breakpoints.value(id); d->breakpoints.remove(id); @@ -363,8 +376,14 @@ void QmlV8DebuggerClient::removeBreakpoint(const BreakpointModelId &id) sendMessage(packMessage(request)); } -void QmlV8DebuggerClient::changeBreakpoint(const BreakpointModelId &/*id*/) +void QmlV8DebuggerClient::changeBreakpoint(const BreakpointModelId &id) { + BreakHandler *handler = d->engine->breakHandler(); + const BreakpointParameters ¶ms = handler->breakpointData(id); + + if (params.type == BreakpointAtJavaScriptThrow) { + return breakOnException(AllExceptions, params.enabled); + } } void QmlV8DebuggerClient::updateBreakpoints() @@ -482,8 +501,8 @@ void QmlV8DebuggerClient::messageReceived(const QByteArray &data) if (type == "response") { if (!value.findChild("success").toVariant().toBool()) { - //TODO:: Error - qDebug() << Q_FUNC_INFO << value.toString(true,2); + //TODO:: have to handle this case for each command + d->engine->logMessage(QmlEngine::LogReceive, QString("V8 Response Error: %1").arg(QString(value.toString(true,2)))); return; } @@ -514,8 +533,7 @@ void QmlV8DebuggerClient::messageReceived(const QByteArray &data) backtrace(); } else { - //TODO:: - //qDebug() << Q_FUNC_INFO << value.toString(true,2); + d->engine->logMessage(QmlEngine::LogReceive, value.toString(true,2)); } } else if (type == "event") { |