gpt4 book ai didi

erlang - 在远程节点上打开 dbg 跟踪?

转载 作者:行者123 更新时间:2023-12-04 18:07:32 26 4
gpt4 key购买 nike

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

Erlang 节点使用 relx 启动脚本(称为 _rel/bin/foo foreground)启动,所以我无法控制启动选项.系统测试运行器(用 Python 编写)正在从节点捕获标准输出。

如何使用 -remsh 连接到 Erlang 节点,打开 dbg-tracing,并将输出写入原始节点上的标准输出?我如何以 Python 友好的方式完成这一切(尽管我很乐意编写一个脚本,如果这样会更容易的话)。

更复杂的是,relx 生成的版本不包含 runtime_tools 库,因此 dbg: 实际上不可用,所以我还要添加 this question .

最佳答案

您可以通过多种方式做到这一点。一切都取决于您熟悉什么,以及您的用例是什么。

  • 我将从手工开始做所有事情。这样你就可以最大程度地控制正在发生的事情,以及效果的样子(如果你调试太多或不够)。这是我最熟悉的,最后你几乎总是必须连接到远程 shell 并手动做一些事情(根据我的经验)

  • dbg 的一个功能,没有太多人谈论它能够从文件中保存/加载跟踪 pasterns。我找到了在 session 之间存储和共享调试信息的最简单方法;但缺乏可读性可能是一个太大的权衡。

  • 如果您不想过多地干扰您的实时系统,则不必使用 dbg。您可以使用默认提供的 erlang:trace,但您必须谨慎对待 VM 所处的状态(dbg 应在退出时关闭所有跟踪;使用 erlang:trace 这是你的责任)

  • 如果调试 session 是 python 脚本的一部分,那么编写 escript 并从 python 调用它是我的选择。您只需要记住,脚本是在新 VM 中运行的,-remsh不会允许您在其他 VM 上运行您的代码。为此,您必须使用 rpc 模块。

  • 由于您正在使用已发布的应用程序,因此您可能会查看日志记录。人们可能会认为应该已经有一些日志记录,很有可能 lager这在 Erlang 中有点标准,并且有可能 change logging level during runtime .

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

关于erlang - 在远程节点上打开 dbg 跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com