GenericJam

GenericJam

VS Code and ElixirLS Errors while trying to process NIFs

I was struggling with this for the past couple of hours. Just putting this out there in the event it helps someone else out (or me when I have to set it up again and have totally forgotten).

If you’re getting a message like this:

(Debugger) Task failed because an exception was raised:
    ** (Mix.Error) Could not start application fast_tls: exited in: :fast_tls_app.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (MatchError) no match of right hand side value: {:error, {:bad_lib, 'load_nif/2 must be explicitly called from the NIF module. It cannot be called through apply/3.'}}

You need to exclude the offending libraries that are using NIF referring modules because (as far as I understand) ElixirLS can’t introspect those libs.

Thanks to posts like this it got me going in the right direction but then I was getting stumped as I was excluding the module it said was causing the problem. The solution is you need to also exclude some or all of the modules it is importing as well.

You can do this by searching in the /deps dir for the name of the module such as ‘fast_xml’. You want to find a file where this module and it’s dependent modules are defined. It’s under

/deps/whaever/ebin/whatever.app

And it will look like this:

             {application,fast_xml,
             [{description,"Fast Expat-based Erlang / Elixir XML parsing library"},
              {vsn,"1.1.37"},
              {modules,[fast_xml,fxml,fxml_gen,fxml_gen_pt,fxml_stream,
                        fxml_sup,fxmlrpc,fxmlrpc_codec,
                        fxmlrpc_codec_external]},
              {registered,[]},
              {applications,[kernel,stdlib,p1_utils]},
              {mod,{fast_xml,[]}},
              {files,["src/","lib/","c_src/fxml.c","c_src/fxml_stream.c",
                      "include/","priv/lib/.keepme","mix.exs","mix.lock",
                      "Makefile.mix","rebar.config","rebar.config.script",
                      "README.md","LICENSE.txt"]},
              {licenses,["Apache 2.0"]},
              {links,[{"Github","https://github.com/processone/fast_xml"}]}]}.

Grab the list of modules and convert them to the right format (Erlang → Elixir) - ‘fast_xml’ > ‘“:fast_xml”’ and put them all in the list of excludeModules in launch.json.

        "excludeModules": [
        ":fast_tls_app",
        "MeeseeksHtml5ever.Native",
        ":prometheus_process_collector",
        ":fast_tls",
        ":fast_tls_sup",
        ":p1_sha",
        ":fast_xml",
        ":stringprep",
        ":fxml",
        ":fxml_gen",
        ":fxml_gen_pt",
        ":fxml_stream",
        ":fxml_sup",
        ":fxmlrpc",
        ":fxmlrpc_codec",
        ":fxmlrpc_codec_external"
]

Happy debugging!

Where Next?

Popular in Questions Top

albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
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
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
mgjohns61585
Could someone help me? I’m making my first elixir program, number guessing game. I can’t figure out how to convert the user’s guess from ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New

Other popular topics Top

axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 48342 226
New
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
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
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

Latest on Elixir Forum

We're in Beta

About us Mission Statement