Fl4m3Ph03n1x

Fl4m3Ph03n1x

How to use recon_trace.calls properly?

Background

I have an app that prints out the following error every few seconds:

=ERROR REPORT==== 17-Jun-2019::13:50:08.172872 ===
Unexpected message: {#Ref<0.2741279221.3080978449.3817>,badarg}

I am trying to find out where it comes from.

Research done

Upon reading the message, I was convinced it originated from a missing handle_info somewhere. So I tested my theory by running the following recon_trace command:

:code.all_loaded()                                                # returns  list of {module_name, path} tuples, containing all modules in the app
|> Stream.map(fn({module, _path}) -> module end)                  # we just want the module_name
|> Stream.filter(&:erlang.function_exported(&1, :handle_info, 2)) # verifies if the given module has a :handle_info/2 callback
|> Stream.map(&{&1, :handle_info, :_})                            # returns a tuple of {module_name, :handle_info, :_}  
|> Enum.map(&:recon_trace.calls(&1, 100))                         # uses recon to trace and print the first 100 calls, from all modules to :handle_info 

In theory, this code should print the first 100 calls to :handle_info for all modules. However, it is only printing information about memsup.

memsup:handle_info(time_to_collect, {state,{unix,linux},
       true,
       {3541655552,31605788672},
       {<0.7027.0>,12120624},
       false,60000,30000,0.8,0.05,<0.286.0>,undefined,undefined,[],[]})

Question

This either means that :memsup is the only process making use of :handle_info (and I know this is false because we have several processes that make use of :handle_info) or the code I posted above is incorrect.

What am I doing wrong?

Marked As Solved

NobbZ

NobbZ

From my experiments, you can only have a single trace. Therefore do as I suggested in the other thread, pass a list of tspec rather than create a trace for each tspec

trace_specs = :code.all_loaded()
|> Stream.map(fn({module, _path}) -> module end)
|> Stream.filter(&:erlang.function_exported(&1, :handle_info, 2))
|> Stream.map(&{&1, :handle_info, :_})

:recon_trace.calls(trace_specs, 100)

Last Post!

NobbZ

NobbZ

Well, @Fl4m3Ph03n1xhas tried and it didn’t work… Just read earlier posts in the linked thread

Where Next?

Popular in Questions Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" =&gt; #BSON.ObjectId&lt;58eb1a7a9ad169198c3dXXXX&gt;, "email" =&gt; ...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
Lily
In templates/appointment/index.html.eex: &lt;%= for appointment &lt;- @appointments do %&gt; &lt;tr&gt; &lt;td&gt;&lt;%= appoi...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

Other popular topics Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 31494 112
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40042 209
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New

We're in Beta

About us Mission Statement