为什么我下载了源后在堆栈跟踪中看到未知源?

问题描述

我想深入了解正在运行单元测试的异常的详细信息,但 HsqlDB 的堆栈跟踪部分显示未知来源。我正在使用 Maven,并且下载了源代码和文档,我可以看到它们在 IDE 中正确定义。

有什么想法为什么我仍然会看到未知来源

Caused by: org.hsqldb.HsqlException: incompatible data type in operation
at org.hsqldb.error.Error.error(UnkNown Source)
at org.hsqldb.error.Error.error(UnkNown Source)
at org.hsqldb.NumberSequence.setDefaults(UnkNown Source)
at org.hsqldb.NumberSequence.<init>(UnkNown Source)
at org.hsqldb.ParserTable.readColumnDeFinitionorNull(UnkNown Source)
at org.hsqldb.ParserTable.readTableContentsSource(UnkNown Source)
at org.hsqldb.ParserTable.compileCreateTableBody(UnkNown Source)
at org.hsqldb.ParserTable.compileCreateTable(UnkNown Source)
at org.hsqldb.ParserDDL.compileCreate(UnkNown Source)
at org.hsqldb.ParserCommand.compilePart(UnkNown Source)
at org.hsqldb.ParserCommand.compileStatements(UnkNown Source)
at org.hsqldb.Session.executeDirectStatement(UnkNown Source)
at org.hsqldb.Session.execute(UnkNown Source)

解决方法

Java 库可以使用包含源文件和行号信息的调试信息进行编译。许多库都是用这些信息编译的,但显然 HSQLDB 是在没有这些信息的情况下编译的(可能是因为这会导致类文件稍微小一些)。

此信息的可用性与您是否下载源代码无关,这仅取决于库 JAR 中的类是如何编译的。

查看 Maven 中专门用于 HSQLDB 的文件,似乎在您的 Maven 依赖项中使用 <classifier>debug</classifier> 很可能使用包含此调试信息的库版本。不过,我还没有验证这一点。