0

我一直在尝试使用 QtScript 和 QScriptDebugger 进行一些实现,但我想知道是否有人有关于以下主题的信息。

当使用 QtScriptDebugger 的函数 attachTo() 时,在文档中它说它设置了一个“自定义”QScriptAgent,如果我想对我的脚本执行进行更多监控,我应该创建一个代理并将所需的事件转发给这个ScriptDebugger 为 ScriptEngine 设置的“自定义”脚本引擎。

那么如何制作或实现这种代理来转发事件呢?我想我明白了这些东西背后的主要思想/概念,但是我在网上找不到任何东西,而且我还没有弄清楚,所以这就是我寻求帮助的原因。

希望有人有关于这个主题的一些信息!

提前致谢!

4

1 回答 1

0

据我记得QtScriptDebugger应该结合QtScriptEngine以下方式使用:

QtScriptEngine *engine = new QtScriptEngine();
engine->setProcessEventsInterval(50); // this is required to prevent your interface from hanging up during using of debugger
QScriptEngineDebugger *scriptDebugger = new QScriptEngineDebugger(engine);
scriptDebugger->setAutoShowStandardWindow(true); // this makes the debugger window to appear when 'debugger;' instruction occurs
scriptDebugger->attachTo(engine); // this incorporates your script engine with its debugger
// ...
// your custom manipulations follows
// ...

// suppose you have some script attributes set
QMap<QString, QScriptValue> scriptAttributes;

// setup global attributes used in your scripts
QScriptValue global = engine->globalObject();
foreach (const QString &varName, scriptAttributes.keys()) {
    global.setProperty(varName, scriptAttributes.value(varName));
}

// check script syntax
QScriptSyntaxCheckResult syntaxResult = engine->checkSyntax(scriptText);
if (QScriptSyntaxCheckResult::Valid != syntaxResult.state()) {
   // report syntax error
}

// run the script
QScriptValue result = engine->evaluate(scriptText);

if (engine->hasUncaughtException()) {
    /// report script run-time error
    qDebug() << QString("Exception during script execution! Line: %1, error: %2")
                    .arg(engine->uncaughtExceptionLineNumber()).arg(engine->uncaughtExceptionBacktrace().join("\n");
}

因此,当您将debugger;命令添加到脚本文本时,应该会出现调试器窗口

于 2013-06-19T16:38:24.360 回答