IntelliJ IDEA Bazel Test调试:断点处如何阻止变量被优化?
解决Kotlin调试时未使用变量被优化的问题
一、调整IntelliJ IDEA原生设置
- 禁用Kotlin编译优化:打开
File > Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler,在Additional command line parameters里添加:-Xno-inline -Xno-optimize,这俩参数能直接关掉编译器的内联和优化逻辑,让未使用的变量保留在调试环境里。 - 调试器配置优化:去
File > Settings > Build, Execution, Deployment > Debugger > Data Views > Kotlin,检查有没有Disable optimization这类选项,直接勾选上。另外在测试的Run/Debug配置里,给VM options加上-Dkotlin.dump.ir=false,避免IR编译器的优化把变量搞没。
二、Bazel for IntelliJ插件相关调整
如果是用Bazel构建测试代码,得同步改Bazel的编译参数:
- 在项目根目录的
.bazelrc文件里加两行:
强制Bazel编译时禁用Kotlin的优化。build --kotlin_compiler_options=-Xno-optimize build --kotlin_compiler_options=-Xno-inline - 打开IntelliJ的Bazel设置(
File > Settings > Build, Execution, Deployment > Bazel),检查测试目标的编译模式是不是dbg(调试模式),如果是opt(优化模式)就改成dbg,优化模式下Bazel会默认砍掉未使用变量。
三、临时保留变量的小技巧(不用加println)
不想改全局设置的话,给变量加个无用引用就行,比println干净:
val collectionIds = // 你的变量计算逻辑 @Suppress("UNUSED_VARIABLE") val _keep = collectionIds // 用个废变量挂着,防止被优化
或者用also块空引用:
val collectionIds = run { // 你的变量计算逻辑 }.also { /* 空块就行,用来保留变量 */ }
内容的提问来源于stack exchange,提问作者kmfsousa
相关产品推荐
相关产品推荐

