erlang 如何在开发OTP应用程序时重新加载所有OTP代码?

baubqpgj  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(210)

在学习OTP的过程中,我对. app和. erl文件做了很多更改,并重新运行我的应用程序以查看更改的效果。
我尝试了以下命令序列来获取所有新更改,但似乎不起作用:
编译src文件...

erlc -o ebin src/*.erl

...后面是Erlang shell:

application:stop(my_app).
application:unload(my_app).
application:load(my_app).
application:start(my_app).

然而,这似乎不起作用,我发现唯一的工作方式是退出erlang shell,重新编译应用程序,然后运行application:start(my_app).
是否有更简单的方法来获取我的更改?

anauzrmj

anauzrmj1#

调用application:load(App)(在停止并卸载之后)将重新加载. app文件,但不会重新加载模块。正如文档所述:"注意,该函数不加载实际的Erlang对象代码."
如果您要使用发行版进行升级,您将提供一个. appup文件,指定升级到新版本时要重新加载哪些模块(如果只有一两个模块发生了变化,则无需重新加载所有模块),但如果您只是在开发,不想停止并重新启动所有模块,则必须设置自己的帮助函数来重新加载代码。
Edit: Since OTP 20 (2017), the interactive Erlang shell now has the lm() function for loading all modules whose .beam files have changed, so there is no need to roll your own utility function for this anymore. See https://erlang.org/doc/man/c.html#lm-0

相关问题