Java/Kotlin调试:如何查看行内无名中间变量的值?
如何在不修改源代码的前提下查看嵌套调用中b()的返回值?
假设我们有如下Java/Kotlin代码:
return a(b())
想要在调试器中查看b()的返回值,但不想通过「提取变量」重构(如下代码)的方式修改源代码——毕竟这种改动会污染变更日志,还可能不小心提交:
var c = b() // 在下行设置断点,即可在调试器中查看变量c return a(c)
可以用以下几种无需修改源码的方案实现:
- 设置方法退出断点:在
b()方法的定义处设置断点,然后在断点的配置里勾选「方法退出」(不同IDE的叫法略有差异,比如IntelliJ IDEA里是「Method Exit」)。当b()执行完成准备返回时,程序会暂停,此时直接在调试器的变量面板里就能看到它的返回值。 - 使用调试器的表达式求值功能:在
return a(b())这一行设置普通断点,当程序暂停后,在调试器的表达式控制台里手动执行b(),就能获取它的返回值。注意:如果b()是有副作用的方法(比如修改全局状态、发起网络请求),这种方式可能会改变程序的运行状态,需要谨慎使用。 - 查看调用栈帧的临时值:部分IDE在执行到
a(b())时,当b()执行完毕,会在调用栈的栈帧信息里保留b()的返回值,你可以在调试器的栈帧详情或临时变量区域找到这个值。
内容的提问来源于stack exchange,提问作者Oleg Vazhnev
相关产品推荐
相关产品推荐

