如何将 Saxon 调试支持从 9.2 升级到 9.5

问题描述

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

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?

解决方法

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

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...