加快 Erlang 的编辑、编译、运行/调试周期

Posted

技术标签:

【中文标题】加快 Erlang 的编辑、编译、运行/调试周期【英文标题】:Speeding up the Erlang Edit, Compile, Run/Debug cycle 【发布时间】:2011-08-14 03:36:25 【问题描述】:

编辑 Erlang 应用程序、编译代码并查看运行结果的最快方法是什么?最好在最后一步跳入 Erlang shell。

我目前的新手设置:

编译应用程序并启动 erl shell 的脚本。 然后我输入 application:start(foo)。 当我修正错字时,我使用 c('module') 重新编译模块并重新启动应用程序。

有没有更快的方法?顺便提一句。我选择的编辑器是 Emacs。

【问题讨论】:

【参考方案1】:

这是我的设置:

在开发过程中,我在单独的终端窗口中打开 Erlang shell。 我从编辑器开始编译(使用组合键),或者只是在源目录中输入make。 编译后,我通过在 Erlang shell 中键入 l() 一次加载所有更改的模块。你可以在这里找到这个和其他一些有用的宏:http://www.snookles.com/erlang/user_default.erl

很少需要重新启动整个 Erlang 应用程序。重新加载更改的模块是一种更常见的用例,通常足以应用您的更改。

关于应用程序启动:如果您的应用程序依赖于其他应用程序,application:start() 将失败,直到您启动所有依赖项。因此,编写辅助函数<your-app-name>:start() 是很常见的。这是example。另一个有用的函数是<your-app-name>:stop()

应用所有这些技术后,工作流程将如下所示:

启动 Erlang shell 并保持打开状态;输入<your-app-name>:start(). 进行更改;运行编译;在你的 Erlang shell 中输入 l()。 当更改需要重新启动应用程序时,键入<your-app-name>:stop(), <your-app-name>:start().

【讨论】:

【参考方案2】:

您可以将rebar 视为构建工具。 make:all/0 和整个 make 模块也可以提供帮助。要从 shell 显式重新加载模块,您可以使用 l(Module)。最后,您可能也有兴趣创建一个 Erlang release 来“包装”您所有的 Erlang 应用程序。

【讨论】:

【参考方案3】:

编辑和编译由我使用的 IDE(带有 erlide 的 Eclispe)完成。

我还创建了一个脚本来启动 vm my 应用程序和有用的工具。该脚本仅用于开发时间。

为了重新加载更改的源然后编译 bin,我使用来自 mochiweb 的重新加载器。重新加载器观察 bin 目录,如果有变化,它会加载模块并运行 eunit 测试,如果你有一些内部。

例子:

erl +A 5 +K true -name @127.0.0.1 -pa $PWD/ebin $PWD/test $PWD/deps/*/ebin -boot start_sasl -s reloader -s toolbar -s

【讨论】:

【参考方案4】:

您还可以尝试 erlbuild。 Erlbuild 是一个简单的应用程序,它在 src 目录中查找更改的源文件,如果找到一些文件,它会再次编译并加载模块。加载模块后,erlbuild 运行模块的测试。

您可以在以下位置找到该项目:https://github.com/ulfa/erlbuild

~乌尔夫

【讨论】:

以上是关于加快 Erlang 的编辑、编译、运行/调试周期的主要内容,如果未能解决你的问题,请参考以下文章

使用-compile在Erlang模块中请求debug_info

如何加快 MonoTouch 编译时间?

如何用gdb调试erlang运行期

erlang虚拟机代码运行原理

CMAKE 有条件地运行 cppcheck

window脚本怎么编辑、编译及运行