【发布时间】:2016-06-19 14:07:55
【问题描述】:
在java 类中使用lombok 会导致stacktrace 中的行号错误吗?
假设:代码上没有使用delombok。
Lombok 不会以line number generation 中断,但它会在放置注释的任何位置生成代码。这些行号。将是字节码的一部分,因此在打印stacktrace 时,它将包含错误的行号。我的上述解释正确吗?
【问题讨论】:
在java 类中使用lombok 会导致stacktrace 中的行号错误吗?
假设:代码上没有使用delombok。
Lombok 不会以line number generation 中断,但它会在放置注释的任何位置生成代码。这些行号。将是字节码的一部分,因此在打印stacktrace 时,它将包含错误的行号。我的上述解释正确吗?
【问题讨论】:
Java编译器根据.java源代码文件的实际行数将行号存储在.class文件中。
Lombok 挂钩到编译过程本身,即时修改写入.class 文件的字节码。它实际上从未将文本添加到.java 源文件,它也不会更改编译器存储在.class 文件中的行号信息。
因此,堆栈跟踪中的行号始终与实际的 Java 源代码匹配。
注意:这个问题排除了“delombok”的情况。对于感兴趣的读者:您可以使用“delombok”插件生成简单的.java 代码,该代码包含 Lombok 在编译过程中会放入的所有内容。该工具适用于从代码库中删除 Lombok 或将源代码提供给被 Lombok 内容混淆的分析工具等情况。在这种情况下,您最终会得到不同的、更大的 .java 源文件,它们当然有不同的行号。
【讨论】: