Erlang 在远程节点上打开dbg跟踪?
在系统测试中运行Erlang应用程序时,有时我想打开并捕获调试跟踪 Erlang节点是使用relx启动脚本(称为Erlang 在远程节点上打开dbg跟踪?,erlang,Erlang,在系统测试中运行Erlang应用程序时,有时我想打开并捕获调试跟踪 Erlang节点是使用relx启动脚本(称为\u rel/bin/foo foreground)启动的,因此我无法控制启动选项。系统测试运行程序(用Python编写)正在从节点捕获stdout 如何使用-remsh连接到Erlang节点,启用dbg-tracing,并将输出写入原始节点上的标准输出?我如何以Python友好的方式完成这一切(尽管我很乐意编写一个escript,如果这样做会更容易的话) 更为复杂的是,relx生成的
\u rel/bin/foo foreground
)启动的,因此我无法控制启动选项。系统测试运行程序(用Python编写)正在从节点捕获stdout
如何使用-remsh
连接到Erlang节点,启用dbg
-tracing,并将输出写入原始节点上的标准输出?我如何以Python友好的方式完成这一切(尽管我很乐意编写一个escript,如果这样做会更容易的话)
更为复杂的是,relx生成的发行版不包含
运行时工具库,因此dbg:
实际上不可用,所以我还要补充一点。可以这样做的方法很少。这一切都取决于您熟悉什么,以及您的用例是什么
- 我会从手工做每件事开始。通过这种方式,您可以最大程度地控制正在进行的调试,以及效果的外观(如果调试过多或不够)。这是我最熟悉的,最后,您几乎总是必须连接到远程shell并手动执行某些操作(根据我的经验)
dbg
的一个特性是,没有太多人谈论从文件中保存/加载跟踪粘贴的能力。我找到了在会话之间存储和共享调试信息的最简单方法;但缺乏可读性可能是一个很大的权衡
- 如果您不想过多地干扰您的实时系统,则不必使用
dbg
。您可以使用默认情况下提供的erlang:trace
,但是您必须小心您将VM留在的状态(dbg
应该在退出时关闭所有跟踪;使用erlang:trace
这是您的责任)
- 若调试会话是python脚本的一部分,那个么编写escript并从python调用它将是我的方法。您只需记住,描述是在新VM中运行的,
-remsh
将而不是允许您在其他VM上运行代码。为此,您必须使用rpc
模块
- 由于您使用的是发布的应用程序,所以您可以查看日志记录。有人可能会认为应该已经有了一些日志记录,这在Erlang中是很标准的,并且有可能实现
就我个人而言,我会尝试一些第一种和最后一种选择的混合,然后进行实验。我们已经在使用啤酒来进行日常记录;对于这个特定的失败测试,我希望获得模块中每个调用函数的跟踪。这不是在生产中,所以我不担心性能影响。