gpt4 book ai didi

elixir - 我如何使用 :observer from IEx when my remote is an embedded system?

转载 作者:行者123 更新时间:2023-12-04 14:03:17 26 4
gpt4 key购买 nike

我想从远程 IEx shell 演示 :observer GUI 的使用。我的目标是 BEAM 在资源受限的嵌入式系统上运行我的 Elixir 应用程序。

我使用 Buildroot 构建了远程操作系统,包括对 Erlang 的支持。我添加了 elixir-lang repo 的结帐以给我 Elixir 和 IEx。 (版本报告为 1.13.0-dev,我使用的是 Erlang/OTP 22。)

我的主机操作系统是 Ubuntu,为了保持一致性,我使用相同版本的 Elixir 和 OTP。

我在远程机器上启动我的应用程序: iex --sname foo --cookie <cookie> -S mix run并从我的主机连接到它: iex --sname bar --cookie <cookie> --remsh foo@<remote machine name>

这给了我一个远程 shell。但是,当我尝试输入 :observer.start() 时,我得到一个错误,ERROR: Could not find 'wxe_driver.so' in: /usr/lib/erlang/lib/wx-1.9/priv

.so 文件实际上存在于我的 Ubuntu 机器上的该路径中,但不存在于缺少 WX 小部件(以及 X 窗口和任何类型的图形输出硬件)的嵌入式系统中。有没有办法解决?我做错了什么吗?

最佳答案

问题出在 --remsh 上。使用 --remsh 将打开一个远程 session ,就像您以与典型 SSH session 类似的方式从该机器执行 IEx 一样。

您需要使用 Node.connect/1 从本地 IEx session 连接到远程节点,然后打开 Observer :observer.start()。这将需要通过 SSH 访问远程机器(您的嵌入式系统)并将两个端口从该系统转发到您的本地主机。第一个端口来自 epmd - Erlang 端口管理器守护进程 - 第二个端口来自您系统的节点。

  • 在您的嵌入式系统上运行 epmd -names 以获取两个端口。

epmd names showing two ports

  • 之后确保 epmd 没有在您的本地主机上运行(ps aux | grep epmd 如果它正在运行则将其杀死)。它应该只在您的嵌入式系统上运行。

  • 将两个端口转发到您的本地主机:

    $ ssh user@remote-embedded -L4369:localhost:4369 -L41437:localhost:41437

  • 再次在本地主机上开始一个新的 IEx session (没有 --remsh):

    $ iex -name bar@127.0.0.1 --cookie mycookie

  • 从此 IEx session 连接到远程系统:

    > Node.connect(:"foo@127.0.0.1")

    这应该返回 true。请注意,我使用的是长名称(-name 而不是像您那样的 -sname),但短名称也应该有效。

  • 最后打开观察者:

    > :observer.start()

    从“节点”菜单中选择您的远程系统。

之所以可行,是因为 Observer 对远程机器运行了多个 RPC 调用,以便从该系统获取数据。这样您就不需要在嵌入式系统上安装任何“图形”。

要了解更多信息,请参阅 http://blog.plataformatec.com.br/2016/05/tracing-and-observing-your-remote-node/

关于elixir - 我如何使用 :observer from IEx when my remote is an embedded system?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69312530/

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