简介
IDEA可是说是目前对erlang语言支持最好的IDE了,包括文件跳转,代码提示等已经相当成熟。但是因为缺少官方维护,erlang的debug功能还是相对简陋的,包括当前最新版本的erlang插件,对debug功能的支持也不能算完整。
erlang官方也提供了debug功能,虽然易用性上还是偏弱,但是功能还是相对比较完整。每次重启的时候必须重新载入环境,断点之类的配置都是在环境中。如果调试需要重启节点,就会很麻烦。
下文的所有使用都是在扩展后的插件基础上,现在官方的IDEA的erlang插件debug功能还需要完善,我自己补全了一部分,包括多进程调试,debug验算窗的代码提示。支持条件断点等。
github地址
编译好的插件(提取码: 533e)
插件是在IDEA2019.3上编译的,应该是需要2019.3以上的版本才能使用
2020-11-16更新
重新编译了一次,拉高了插件版本,避免和原作者的冲突,最好是直接回合给原作者,但是改动太多了,回合估计会需要很久,目前是直接把发布版本拉高到2000来暂时解决
链接 提取码: 5f42
2021-1-14更新
- 新增了debug阶段的变量提示,鼠标移动到变量上,或者按住Alt点击变量可以直接验算变量值
- 最佳实践修改,具体参看 实践修改部分
链接 提取码: 33hi
Erlang的debug基础
erlang的debug对外接口基本都由int模块提供,和其他语言最大的不同在于,erlang调试的最小单位是模块,如果要在某个模块中进行断点调试,则首先必须调用int:i 或者int:ni将模块进行标记,没有标记的模块,即使标记了断点,也是不会生效。断点的跳转也依赖于标记,如果在A模块中触发断点,断点处执行B模块的函数,但是B模块没有被标记的情况下,下一步是不能跳转到B模块的。
还有一个重要的不同是,erlang是典型的多进程语言,意味着断点可能被多个进程同时触发,erlang的设计是触发断点的进程会阻塞在执行处,直到手动将断点继续,而无论继续,下一步,都是以单个进程为单位。意味着如果有10个进程触发了断点,则必须继续10次才行。
IDEA提供的基础debug
IDEA的erlang插件提供的debug大体上可以分为两种: