forked from qt-creator/qt-creator
JSDebugger: Only hit breakpoints in user code
Check that the topmost stack entry is a user defined ScriptFunction.
This avoids hitting the anonymous functions used for bindings, e.g.
onClicked: Qt.quit()
leads to script code
(function onClicked() { Qt.quit(); })
which will be hit twice for the debugger: Once for the function call
itself, then for the execution of Qt.quit().
Change-Id: I4cb374782c93a26d97d4a717ce67d1fb2f6df438
Task-number: QTCREATORBUG-5090
Reviewed-on: http://codereview.qt.nokia.com/2746
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Christiaan Janssen <christiaan.janssen@nokia.com>
This commit is contained in:
@@ -370,17 +370,17 @@ void JSDebuggerAgentPrivate::positionChange(qint64 scriptId, int lineNumber, int
|
|||||||
|
|
||||||
// check breakpoints
|
// check breakpoints
|
||||||
if (!breakpoints.isEmpty()) {
|
if (!breakpoints.isEmpty()) {
|
||||||
QHash<qint64, QString>::const_iterator it = filenames.constFind(scriptId);
|
|
||||||
QScriptContext *ctx = engine()->currentContext();
|
QScriptContext *ctx = engine()->currentContext();
|
||||||
QScriptContextInfo info(ctx);
|
QScriptContextInfo info(ctx);
|
||||||
|
|
||||||
|
if (info.functionType() == QScriptContextInfo::ScriptFunction) {
|
||||||
|
QHash<qint64, QString>::const_iterator it = filenames.constFind(scriptId);
|
||||||
if (it == filenames.constEnd()) {
|
if (it == filenames.constEnd()) {
|
||||||
// It is possible that the scripts are loaded before the agent is attached
|
// It is possible that the scripts are loaded before the agent is attached
|
||||||
QString filename = info.fileName();
|
QString filename = info.fileName();
|
||||||
|
|
||||||
JSAgentStackData frame;
|
JSAgentStackData frame;
|
||||||
frame.functionName = info.functionName().toUtf8();
|
frame.functionName = info.functionName().toUtf8();
|
||||||
|
|
||||||
QPair<QString, qint32> key = qMakePair(filename, lineNumber);
|
|
||||||
it = filenames.insert(scriptId, filename);
|
it = filenames.insert(scriptId, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -394,6 +394,7 @@ void JSDebuggerAgentPrivate::positionChange(qint64 scriptId, int lineNumber, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case NoState:
|
case NoState:
|
||||||
|
|||||||
Reference in New Issue
Block a user