【问题标题】:How to upgrade Saxon debugging support from 9.2 to 9.5如何将 Saxon 调试支持从 9.2 升级到 9.5
【发布时间】:2021-01-31 14:26:00
【问题描述】:

我有一个旧应用程序正在从 Saxon-HE 9.2 升级到 9.5(希望升级到 9.8)。该应用程序实现了 Saxon Debugger 接口。升级到 9.5 后,Debugger 不再触发任何事件。我认为这可能是由于字节码优化,并将GENERATE_BYTE_CODE 设置为false。但是,我仍然没有收到任何调试事件。我相信我找到了问题,但不知道解决方法。在 9.2 中,InstructionInfo 有许多子类,包括 StyleElement。我的代码期望某些InstructionInfos 是StyleElements,但事实并非如此。

public class Saxon2TraceListener implements TraceListener {
    // implement interface
    public void enter(InstructionInfo instruction, XPathContext context)
      {
        
        if (!(instruction instanceof StyleElement))
          return;
        // do logic with StyleElement
      }
}

如何从 InstructionInfo 获取 StyleElement?

【问题讨论】:

    标签: java saxon


    【解决方案1】:

    恐怕当您使用这样的低级接口时,阅读和理解源代码是无可替代的。 9.2 和 9.5 都是不受支持的版本,无论如何,这是我们只为付费客户提供的那种支持——我们必须在某个地方划清界限。

    我认为实际的Debugger 接口已经过时了一段时间。它最初的想法是允许您使用占用每个插槽的变量名称来注释堆栈帧,但现在这是标准产品功能,不需要自定义调试器。

    您似乎在谈论 TraceListener 接口,它在后续版本中肯定会发生变化,这是不可避免的,因为它使您可以访问已编译样式表的内部表示,这是我们一直在调整的东西。

    我不确定 9.5 或 9.8 中的情况,但在 10.x 中,TraceListener.enter()TraceListener.leave() 的参数已从 InstructionInfo 更改为 Traceable,以及每个表达式和指令是Traceable

    StyleElement 是源样式表树形表示中的一个节点,无论您是否在跟踪/调试,源样式表在运行时不再存在。

    【讨论】:

    • 我验证了 10.x 的 API 从 InstructionInfo 更改为 Traceable。 9.3 到 9.9 使用 InstructionInfo
    猜你喜欢
    • 2016-12-20
    • 2023-02-07
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多