summaryrefslogtreecommitdiffstats
path: root/src/scripttools/debugging/qscriptdebuggerbackend.cpp
diff options
context:
space:
mode:
authorJoel Nordell <joel.nordell@chloridepower.com>2009-06-17 15:26:41 +0200
committerKent Hansen <khansen@trolltech.com>2009-06-17 15:44:46 +0200
commit5af2e06cb543bd27450c29a1fca8686413f1cceb (patch)
treecb0a085c640d30813f58b3e43acfdf81396ac0f7 /src/scripttools/debugging/qscriptdebuggerbackend.cpp
parent30d6ac5feeb43b32eccc72595fe9a2c89d0f5c1e (diff)
fix crash when detach()ing a debugger and then evaluating script print() function
Merge-request: 554 Reviewed-by: Kent Hansen <khansen@trolltech.com>
Diffstat (limited to 'src/scripttools/debugging/qscriptdebuggerbackend.cpp')
-rw-r--r--src/scripttools/debugging/qscriptdebuggerbackend.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/scripttools/debugging/qscriptdebuggerbackend.cpp b/src/scripttools/debugging/qscriptdebuggerbackend.cpp
index da9d50e423..c7577d6261 100644
--- a/src/scripttools/debugging/qscriptdebuggerbackend.cpp
+++ b/src/scripttools/debugging/qscriptdebuggerbackend.cpp
@@ -412,11 +412,14 @@ void QScriptDebuggerBackend::attachTo(QScriptEngine *engine)
detach();
d->agent = new QScriptDebuggerAgent(d, engine);
QScriptValue global = engine->globalObject();
+ d->origTraceFunction = global.property(QString::fromLatin1("print"));
global.setProperty(QString::fromLatin1("print"), traceFunction());
// global.setProperty(QString::fromLatin1("qAssert"), assertFunction());
+ d->origFileNameFunction = global.property(QString::fromLatin1("__FILE__"));
global.setProperty(QString::fromLatin1("__FILE__"), fileNameFunction(),
QScriptValue::PropertyGetter | QScriptValue::PropertySetter
| QScriptValue::ReadOnly);
+ d->origLineNumberFunction = global.property(QString::fromLatin1("__LINE__"));
global.setProperty(QString::fromLatin1("__LINE__"), lineNumberFunction(),
QScriptValue::PropertyGetter | QScriptValue::PropertySetter
| QScriptValue::ReadOnly);
@@ -438,13 +441,13 @@ void QScriptDebuggerBackend::detach()
if (eng && eng->agent() == d->agent) {
eng->setAgent(0);
QScriptValue global = eng->globalObject();
- if (global.property(QString::fromLatin1("print")).strictlyEquals(traceFunction()))
- global.setProperty(QString::fromLatin1("print"), QScriptValue());
+ global.setProperty(QString::fromLatin1("print"), d->origTraceFunction);
+ d->origTraceFunction = QScriptValue();
// global.setProperty(QString::fromLatin1("qAssert"), QScriptValue());
- if (global.property(QString::fromLatin1("__FILE__")).strictlyEquals(fileNameFunction()))
- global.setProperty(QString::fromLatin1("__FILE__"), QScriptValue());
- if (global.property(QString::fromLatin1("__LINE__")).strictlyEquals(lineNumberFunction()))
- global.setProperty(QString::fromLatin1("__LINE__"), QScriptValue());
+ global.setProperty(QString::fromLatin1("__FILE__"), d->origFileNameFunction);
+ d->origFileNameFunction = QScriptValue();
+ global.setProperty(QString::fromLatin1("__LINE__"), d->origLineNumberFunction);
+ d->origLineNumberFunction = QScriptValue();
d->agent->nullifyBackendPointer();
d->agent = 0; // agent is owned by engine
}