跳到主要内容

调试API更改


旧API和新API之间的主要区别在于,应用程序需要实现org.mozilla.javascript.debugger.Debuggerorg.mozilla.javascript.debugger.DebugFrame接口,以便在脚本执行期间接收调试信息。有关这些类的详细信息,请参阅以下API文档:

此外,org.mozilla.javascript.debugger.DebuggableEngine接口以及org.mozilla.javascript.Context中的getDebuggableEngine方法被以下三个上下文方法替代,以设置/获取当前线程上下文中的调试器及其上下文数据:

以下是一些示例,说明如何将您的应用程序更新为使用新API。

设置和查询调试器实现

旧API:

cx.getDebuggableEngine.setDebugger(debugger);
cx.getDebuggableEngine.getDebugger();

新API:

cx.setDebugger(debugger);
cx.getDebugger();

调试脚本执行

旧API:

// 旧API没有直接支持调试脚本执行的功能

新API:

// 新API通过上下文管理调试器实例

监控和控制执行流程

旧API:

// 旧API使用独立的DebuggableScript接口
script.debugger;
script.start();

新API:

// 新API集成到Context中
cx.debuggeeScripts;
cx.suspend();

获取和设置属性值

旧API:

// 旧API没有直接支持属性访问控制
obj.value; // 直接字段访问

新API:

// 新API使用上下文管理属性访问
cx.getValue(obj, "value");
cx.setValue(obj, "value", 42);

调用函数和处理异常

旧API:

// 旧API没有直接支持调试功能
function call();
try {
call();
} catch (e) {
e.rhinoException;
}

新API:

// 新API提供了更全面的调试控制
cx.callMethod(obj, "method", args);
cx.catchException(e);

示例更新步骤

以下是从旧API迁移到新API的具体步骤:

  1. 替换调试器获取方式
// 旧API
Debugger debugger = cx.getDebuggableEngine().getDebugger();

// 新API
Debugger debugger = cx.getDebugger();
  1. 更新脚本执行控制
// 旧API
Script script = cx.createScript(...);
script.setDebugger(debugger);
script.execute();

// 新API
cx.setDebugger(debugger);
cx.evaluateScript(script, ...)
  1. 替换属性访问方式
// 旧API
Object value = obj.value;

// 新API
Object value = cx.getValue(obj, "value");
  1. 更新函数调用机制
// 旧API
obj.functionCall(args);

// 新API
cx.callMethod(obj, "functionCall", args);
  1. 异常处理调整
// 旧API
try {
dangerousCall();
} catch (e) {
if (e instanceof RhinoException) {
// 处理Rhino异常
}
}

// 新API
try {
dangerousCall();
} catch (e) {
if (cx.isRhinoException(e)) {
// 处理Rhino异常
}
}

兼容性注意事项

在迁移过程中需要注意以下几点:

  1. 方法名称变更

    • getDebuggableEngine() → 移除,直接使用上下文管理调试器。
    • setDebugger(Debugger) → 新增,上下文级别设置调试器。
  2. 属性访问控制

    • 直接字段访问将被限制,需要通过getValuesetValue进行操作。
  3. 异常处理机制

    • Rhino异常的识别方式有所调整,请使用isRhinoException()方法进行判断。
  4. 脚本执行上下文

    • 脚本执行现在完全依赖于上下文环境,需要确保在正确的上下文中进行操作。

新功能介绍

新API引入了以下主要功能:

  1. 更强大的调试控制

    • 统一的上下文管理机制。
    • 更细粒度的执行监控和控制能力。
  2. 增强的安全性

    • 严格的属性访问控制。
    • 上下文级别的异常处理支持。
  3. 改进的性能

    • 减少了调试相关对象的创建开销。
    • 更高效的执行监控机制。
  4. 新功能特性

    • 支持对eval和Function脚本进行调试。
    • 能够从URL加载脚本源,即使在脚本初始化时没有安装调试器。

通过这些改进,新的API提供了更强大、更灵活的调试功能,同时保持了向后兼容性,使得迁移过程更加平滑。