调试API更改
旧API和新API之间的主要区别在于,应用程序需要实现org.mozilla.javascript.debugger.Debugger
和org.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的具体步骤:
- 替换调试器获取方式:
// 旧API
Debugger debugger = cx.getDebuggableEngine().getDebugger();
// 新API
Debugger debugger = cx.getDebugger();
- 更新脚本执行控制:
// 旧API
Script script = cx.createScript(...);
script.setDebugger(debugger);
script.execute();
// 新API
cx.setDebugger(debugger);
cx.evaluateScript(script, ...)
- 替换属性访问方式:
// 旧API
Object value = obj.value;
// 新API
Object value = cx.getValue(obj, "value");
- 更新函数调用机制:
// 旧API
obj.functionCall(args);
// 新API
cx.callMethod(obj, "functionCall", args);
- 异常处理调整:
// 旧API
try {
dangerousCall();
} catch (e) {
if (e instanceof RhinoException) {
// 处理Rhino异常
}
}
// 新API
try {
dangerousCall();
} catch (e) {
if (cx.isRhinoException(e)) {
// 处理Rhino异常
}
}
兼容性注意事项
在迁移过程中需要注意以下几点:
-
方法名称变更:
getDebuggableEngine()
→ 移除,直接使用上下文管理调试器。setDebugger(Debugger)
→ 新增,上下文级别设置调试器。
-
属性访问控制:
- 直接字段访问将被限制,需要通过
getValue
和setValue
进行操作。
- 直接字段访问将被限制,需要通过
-
异常处理机制:
- Rhino异常的识别方式有所调整,请使用
isRhinoException()
方法进行判断。
- Rhino异常的识别方式有所调整,请使用
-
脚本执行上下文:
- 脚本执行现在完全依赖于上下文环境,需要确保在正确的上下文中进行操作。
新功能介绍
新API引入了以下主要功能:
-
更强大的调试控制:
- 统一的上下文管理机制。
- 更细粒度的执行监控和控制能力。
-
增强的安全性:
- 严格的属性访问控制。
- 上下文级别的异常处理支持。
-
改进的性能:
- 减少了调试相关对象的创建开销。
- 更高效的执行监控机制。
-
新功能特性:
- 支持对eval和Function脚本进行调试。
- 能够从URL加载脚本源,即使在脚本初始化时没有安装调试器。
通过这些改进,新的API提供了更强大、更灵活的调试功能,同时保持了向后兼容性,使得迁移过程更加平滑。