Fl4m3Ph03n1x

Fl4m3Ph03n1x

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?

Showing Posts 1 to 3

LostKobrakai

LostKobrakai

  • Args is either the arity of a function ( 0..255 ), a wildcard pattern ( '_' ), a match specification, or a function from a shell session that can be transformed into a match specification

This is from the docs of recon. I’d imagine your function does not match the last part of being able to be transformed into a matchspec. Maybe try GitHub - ericmj/ex2ms: :ets.fun2ms for Elixir, translate functions to match specifications · GitHub to generate the matchspec directly.

Fl4m3Ph03n1x

Fl4m3Ph03n1x OP

I tried the library with the following code:

iex -S mix
import Ex2ms

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

But it returned the following output:

#Function<6.128620087/1 in :erl_eval.expr/5>

Which is not a match specification afaik.

Am I using this library incorrectly?

NobbZ

NobbZ

Just importing a module doesn’t change anything… You need to actually use the provided macros…

In your case it should be enough to replace fn by fun.

— All posts loaded —

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews