Erlang dbg - 使用远程shell在生产OTP系统上进行调试

时间:2012-09-15 10:17:09

标签: debugging erlang otp

我有一个基于OTP的Erlang应用程序似乎表现得很奇怪。

我想连接到erlang shell并准确追踪正在发生的事情。 我可以对dbg:tracer(),dbg:tp()等进行所有调用,但是没有输出发送到我的shell。

我想这可能是因为我通过远程shell连接。

但是,当我调用dbg:n(wiwob @ vlxd38-wob)时。我收到一个错误:

** exception error: bad argument in an arithmetic expression
     in operator  -/2
        called as wiwob@vlxd38 - wob

如何找出输出发送到哪个shell并将其传递给我的shell?

2 个答案:

答案 0 :(得分:3)

dbg:n/1的参数必须是原子而wiwob@vlxd38-wob不是原子,需要引用'wiwob@vlxd38-wob'。有关atom的语法和其他数据类型,请参阅Atoms

答案 1 :(得分:1)

我无法帮助您解决dbg问题,您没有提供有关如何将调试器连接到进程,模块的足够信息......

对于第二点,错误是自解释的,解析表达式wiwob @ vlxd38-wob,shell尝试执行

wiwob @ vlxd38减去wob,2个原子是不可能的。

函数dbg:n / 1具有以下规范:

n(Nodename) -> {ok, Nodename} | {error, Reason}
Nodename = atom()
Reason = term()

因此您必须将您的节点名称写为'wiwob @ vlxd38-wob',以强制整个表达式为单个原子。