如何在生产中调试Elixir应用程序?

raa*_*rts 5 erlang elixir phoenix-framework

这与我当前的问题无关,但更像是一般情况。有时我会遇到一个仅在生产配置中发生的问题,我想在那里进行调试。在Elixir中解决此问题的最佳方法是什么?生产在没有图形环境的情况下运行(泊坞窗)。

在开发人员中,我可以使用IEX.pry,但是由于无法在生产中使用mix,因此似乎不是一种选择。

对于Erlang,https: //stackoverflow.com/a/21413344/1561489提到了dbg和redbug,但是即使可以使用它们,我也需要帮助将它们应用于Elixir代码。

Emi*_*mil 6

首先,使用 启动在您的开发计算机上运行 iex 的本地节点iex -S mix。如果您不希望本地运行的应用程序导致激活断点,则需要禁用该应用程序在本地启动。为此,您只需注释掉或 runapplication中的函数即可。mix.exsiex -S mix run --no-start

接下来,您需要使用 .dev 节点上的 iex 连接到在 docker 上运行的远程节点Node.connect(:"remote@hostname")。为此,您必须确保远程计算机上的 epmd 和节点端口均可从本地节点访问。

最后,连接节点后,从本地 iex 运行,:debugger.start()这将使用 GUI 打开调试器。现在在本地 iex 中运行,:int.ni(<Module you want to debug>)它将使模块对调试器可见,您可以继续添加断点并开始调试。

您可以在此处找到包含步骤和屏幕截图的教程。