调试器即 REPL,REPL 即调试器 Mar 25, 2025

我_热爱_调试器! 上一次我认真使用调试器大约是在 2017 年左右,那时我还在用 Kotlin 编程。 自那以后,我转而使用原生代码,但遗憾的是,gdblldb 对我几乎没有帮助。 这是因为它们仅仅是“调试器”,但我需要的是一个 REPL,以及一个调试器,合二为一。 在本文中,我将展示一种更高效的使用调试器作为 REPL 的方法。

这个技巧归结为两个 IntelliJ IDEA 的特性:Run to CursorQuick Evaluate Expression

第一个特性,Run to Cursor,恢复程序的运行,直到到达光标所在的那一行。 它是 stepping into, over, 和 out 等原始调试器特性的声明式替代方案 —— 你不再需要告诉调试器如何执行每一步,而是直接告诉它你想去哪里:

第二个特性,Quick Evaluate Expression,在当前堆栈帧的上下文中计算选定的表达式。 关键的是,这不一定是预先存在的表达式,你可以输入新的东西并计算它!

Run to Cursor 设置了有趣的上下文,而 Quick Evaluate 允许你四处探索。 这两个特性完全改变了我使用调试器的方式 —— 我不再单步执行程序并观察它,而是在执行的各个有趣点之间快速切换并进行实验。

调试器和 REPL 的作者们,请注意工作流的以下特点: