打开远程节点上的dbg跟踪?

时间:2014-04-10 18:24:40

标签: erlang

在我们的系统测试中运行Erlang应用程序时,我有时想打开并捕获调试跟踪。

使用 relx 启动脚本(称为_rel/bin/foo foreground)启动Erlang节点,因此我无法控制启动选项。系统测试运行器(用Python编写)从节点捕获stdout。

如何使用-remsh连接到Erlang节点,打开dbg - 跟踪,并将该输出写入原始节点上的stdout?我如何以Python友好的方式完成所有这些工作(尽管我很乐意写一个escript,如果这样会更容易)。

为了进一步复杂化, relx 生成的版本不包含runtime_tools库,因此dbg:实际上不可用,所以我还要添加{ {3}}

1 个答案:

答案 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

就个人而言,我会尝试混合使用第一个和最后一个选项,然后进行实验。