调试依赖Apache Calcite的IDEA项目时,如何导航到Calcite代码?
解决调试Apache Calcite时无法查看源码/显示“Unknown Source”的问题
原因分析
Apache Calcite使用Janino动态生成字节码文件,默认不会附带调试信息,这会导致调试时调用栈显示“Unknown Source”,IntelliJ也无法直接导航到对应源码。
解决步骤
1. 正确添加Janino调试JVM参数
把以下参数添加到应用运行/调试配置的VM options里(不是IntelliJ全局VM参数):
-Djanino.source_debugging.enable=true
这个参数会强制Janino生成带调试信息的字节码,让调用栈能关联到源码位置。
2. 关联Calcite源码包
IntelliJ无法跳转源码大概率是没关联Calcite的源码Jar:
- 按
Ctrl+Alt+Shift+S打开Project Structure - 进入
Libraries,找到所有Calcite相关依赖 - 右键依赖,选择
Download Sources,等IntelliJ自动下载并关联
3. 强制反编译字节码
如果源码下载失败还是看不到内容:
- 在调用栈里右键Calcite的方法,直接选
Decompile - 或者去
Settings→Build, Execution, Deployment→Compiler→Java Compiler,确认Use compiler是javac,并勾选Delegate IDE build/run actions to gradle/maven(用构建工具的话)
4. 处理动态生成类的特殊情况
Calcite有些类是Janino动态生成的,本身没有对应源码文件:
- 调试时用
Evaluate Expression查看动态类的内容 - 调整Calcite日志级别为DEBUG,让它把动态生成的代码输出到本地文件,方便排查
内容的提问来源于stack exchange,提问作者Afsal
相关产品推荐
相关产品推荐

