【发布时间】:2017-11-15 23:23:36
【问题描述】:
我想学习一个用作消息代理的开源软件(EMQTT https://github.com/emqtt/emqttd),但是当我尝试更改一些代码并跟踪消息在其中的流动方式时,出现了 Intellij Idea 似乎的问题一次只能调试一个 Erlang 函数或一个模块。有什么方法可以调试整个项目并用断点跟踪它,而不是在函数中逐个调试它们?
【问题讨论】:
标签: intellij-idea erlang
我想学习一个用作消息代理的开源软件(EMQTT https://github.com/emqtt/emqttd),但是当我尝试更改一些代码并跟踪消息在其中的流动方式时,出现了 Intellij Idea 似乎的问题一次只能调试一个 Erlang 函数或一个模块。有什么方法可以调试整个项目并用断点跟踪它,而不是在函数中逐个调试它们?
【问题讨论】:
标签: intellij-idea erlang
Intellij 使用钢筋作为项目经理。 rebar 已被弃用,rebar3(新版本的 rebar)具有高级功能。
您可以使用 rebar3 及其高级功能来运行测试和透析器。
EMQTT 支持 travis !
你可以 fork 它并在你的项目中启用 travis。
travis 是一个测试平台,每次更改后都会测试您的项目。
欲了解更多信息,请参阅travis docs
【讨论】:
经过几天的尝试,我找到了一种可以使用 Intellij Idea 进行调试的方法,它不如我想找到的方法那么完美,但它在一定程度上有所帮助,只需在此处发布即可有需要的可以参考一下。
用 c("your erl file", debug_info) 编译。编译时必须有debug_info,否则调试会报错:"no debug info in beam file"。
根据你的模块配置参数,下图供参考。如果您的函数需要 args,您可能需要提供函数 args
ps:这对于使用 shell 编译来说是相对多余的,但这是我发现的唯一可行的方法,如果没有提供光束文件,它总是会引发错误:“没有光束文件”。
如果有人有更好的方法,请通过回答这个问题或评论给我帮助,非常感谢!
【讨论】:
将源文件和工件放在一个目录中的解决方案似乎是使用 Intellij 调试器的唯一方法。由于通常源文件和人工制品不在同一个目录中,这种行为看起来很奇怪。因此,我打开了一个问题 (https://github.com/ignatov/intellij-erlang/issues/811)。
How to debug erlang code during rebar3 eunit? 中描述了适用于 rebar3 和 eunit 的解决方案。您可以使用 erlang 插件提供的对运行 rebar3 命令的支持,在 Intellij 中将 rebar3 作为测试 shell 启动。
【讨论】: