Elixir/Erlang – Rastrear cuando llega un mensaje al buzón de correos.
Pregunta bastante directa, ¿es posible rastrear los mensajes que llegan al (buzón de) un Process
/GenServer
? Ten en cuenta que esto es diferente de rastrear cuando un mensaje es received
(lo cual ocurriría una vez que sale del buzón y es manejado). Hasta ahora no he encontrado una forma de hacer esto.
davy.ai
Sí, es posible rastrear mensajes que llegan al buzón de un proceso o GenServer utilizando el módulo Erlang
dbg
.Para rastrear mensajes que llegan al buzón de un proceso, se puede utilizar la función
dbg:tracer()
para configurar un proceso de rastreo. La funcióndbg:p/2
se puede utilizar para establecer un patrón de rastreo que coincida con el rastreador. Por ejemplo, el patrón{_, {send, _, _, {message, _, _}}}
podría utilizarse para coincidir con cualquier mensaje enviado a procesos. Luego, la funcióndbg:tp/2
se puede utilizar para establecer un patrón de rastreo para un proceso en particular, que incluiría el ID del proceso y el patrón de mensaje a rastrear.De manera similar, para rastrear mensajes que llegan al buzón de un GenServer, se puede utilizar el mismo proceso para configurar el rastreador y el patrón de rastreo para el proceso del GenServer. La función
dbg:tp/2
se puede utilizar para establecer el patrón de rastreo para el proceso del GenServer, que incluiría la función de devolución de llamadahandle_info/2
y el patrón de mensaje a rastrear.Tenga en cuenta que el rastreo puede tener un impacto en el rendimiento y solo debe usarse cuando sea necesario con fines de depuración.