在我们的系统测试中运行Erlang应用程序时,我有时想打开并捕获调试跟踪。
使用 relx 启动脚本(称为_rel/bin/foo foreground
)启动Erlang节点,因此我无法控制启动选项。系统测试运行器(用Python编写)从节点捕获stdout。
如何使用-remsh
连接到Erlang节点,打开dbg
- 跟踪,并将该输出写入原始节点上的stdout?我如何以Python友好的方式完成所有这些工作(尽管我很乐意写一个escript,如果这样会更容易)。
为了进一步复杂化, relx 生成的版本不包含runtime_tools
库,因此dbg:
实际上不可用,所以我还要添加{ {3}}
答案 0 :(得分:0)
你可以做的很少。一切都取决于您熟悉的内容以及您的用例。
我会从手工手工开始。这样你就可以最大程度地控制其中的一个,以及效果如何(如果调试太多或者调试不够)。这是我最熟悉的,最后你几乎总是必须连接到远程shell并亲自做一些事情(根据我的经验)
dbg
的一个特点是,没有太多人谈论我从文件中保存/加载跟踪pasterns的能力。我找到了在会话之间存储和共享调试信息的最简单方法;但缺乏可读性可能是一个太大的权衡。
如果您不想过多地干扰您的实时系统,则不必使用dbg
。您可以使用默认情况下提供的erlang:trace
,但您必须对离开虚拟机的状态保持谨慎(dbg
应该在退出后关闭所有跟踪; erlang:trace
表示'是你的责任)
如果你调试session是python脚本的一部分,writeng escript并从python中调用它将是我的方法。您只需要记住,escripts在新VM中运行,-remsh
将不允许您在其他VM上运行代码。您必须使用rpc
模块。
由于您正在使用应用程序,因此您可能会考虑使用日志记录。有人可能会认为应该已经存在一些日志记录,很可能lager这在Erlang中有些标准,并且有可能change logging level during runtime。
就个人而言,我会尝试混合使用第一个和最后一个选项,然后进行实验。