/*! Detaches this backend from the current script engine. The backend's state (including breakpoints and information on loaded scripts) will be invalidated. \sa attach() */ void QScriptDebuggerBackend::detach() { Q_D(QScriptDebuggerBackend); if (d->agent) { QScriptEngine *eng = d->agent->engine(); if (eng && eng->agent() == d->agent) { eng->setAgent(0); QScriptValue global = eng->globalObject(); global.setProperty(QString::fromLatin1("print"), d->origTraceFunction); d->origTraceFunction = QScriptValue(); // global.setProperty(QString::fromLatin1("qAssert"), QScriptValue()); global.setProperty(QString::fromLatin1("__FILE__"), QScriptValue(), QScriptValue::PropertyGetter); global.setProperty(QString::fromLatin1("__FILE__"), d->origFileNameFunction); d->origFileNameFunction = QScriptValue(); global.setProperty(QString::fromLatin1("__LINE__"), QScriptValue(), QScriptValue::PropertyGetter); global.setProperty(QString::fromLatin1("__LINE__"), d->origLineNumberFunction); d->origLineNumberFunction = QScriptValue(); d->agent->nullifyBackendPointer(); d->agent = 0; // agent is owned by engine } } d->pendingEvaluateLineNumber = -1; d->ignoreExceptions = false; d->nextScriptValueIteratorId = 0; qDeleteAll(d->scriptValueIterators); d->scriptValueIterators.clear(); qDeleteAll(d->scriptObjectSnapshots); d->scriptObjectSnapshots.clear(); }