Background
I have an app constantly logging the following error:
=ERROR REPORT==== 18-Jun-2019::11:30:55.362697 ===
Unexpected message: {#Ref<0.1587460723.3280207877.77462>,badarg}
At first I thought that one of our GenServers with a handle_info
callback was missing a clause. But now after some research I concluded that the process receiving this message doesn’t even have a handle_info
callback implemented because I used recon_trace
to spy on all modules that have implementations of handle_info
and none was receiving messages like the one above.
Objective
My objective is now to, given a module, check for all the messages it receives, and print those who contain a tuple with the following format: {reference, any}
To achieve this I am trying to use recon_trace
:
filter = fn args ->
has_tuples? = Enum.any?(args, fn x ->
case x do
{ref, _reason} when is_reference(ref) -> true
_ -> false
end
end)
case has_tuples? do
true -> :ok
false -> :nok
end
end
:recon_trace.calls({hd(mods), :_, filter}, 10)
Error
However I can’t get this code to run due to the following error:
Error: fun with body matching ('=' in body) is illegal as match_spec
** (CaseClauseError) no case clause matching: {:error, :transform_error}
(recon) src/recon_trace.erl:494: :recon_trace.validate_tspec/3
(recon) src/recon_trace.erl:424: :recon_trace."-trace_calls/3-lc$^0/1-0-"/2
(recon) src/recon_trace.erl:426: :recon_trace.trace_calls/3
What am I doing wrong?