在dtrace中获取Erlang消息的消息内容

问题描述 投票:1回答:1

我正在尝试使用Erlang和dtrace,并且想知道是否可以获取两个Erlang进程之间交换的消息内容。我尤其对message-sendmessage-receive探针感兴趣。

我同时查看了erlang_dtrace.dmessages.d,看是否可行,但是我没有取得任何进展。

有没有一种方法可以实现这一目标。如果没有,还有其他选择吗?

erlang trace dtrace
1个回答
0
投票

此处在第242行使用了消息接收探针:

https://github.com/erlang/otp/blob/4d0c23bd19f138e4fcfedd11283636e96d6bbc4f/erts/emulator/beam/msg_instrs.tab#L227

(请注意,只有当探针本身已启用,这由前面的宏确定227。)

有趣的是,该消息本身并未公开,这就是为什么您无法对其进行跟踪的原因。但是,我想对VM进行补丁以实现您想要的操作是可行的。您需要将消息作为字符串呈现到缓冲区中,并公开该缓冲区的地址。该习语的现有示例是

https://github.com/erlang/otp/blob/4d0c23bd19f138e4fcfedd11283636e96d6bbc4f/erts/emulator/beam/global.h#L1603

© www.soinside.com 2019 - 2024. All rights reserved.