Debugging Mix Dependencies Locally
Have you ever needed to debug a dependency, perhaps to track down a bug or maybe just to see how it works? In scripted languages like Ruby or JS, you can usually add debug statements, like
puts "test" or
console.log("test"), to the dependency’s code and see the output the next time you run your app.
This does not quite work in an Elixir / Mix project as dependencies are compiled and usually compiled just once, when they are fetched. Fortunately for us,
mix (Elixir’s build tool) gives us an option called
path, to automatically recompile a dependency whenever it changes. Simply declare the
path option with your dependency in your project’s
mix.exs like so:
mix to look at the
deps/my_dep folder for that dependency when compiling, and recompile it (and related project files) anytime a change is detected. Now you can open up the code at
deps/my_dep, add your debug statements, and explore away!
Absolute & Relative Paths
Note that the
path option isn’t limited to looking at the
deps folder, and also accepts relative and absolute system paths, like so:
This is particularly useful if you are developing a new Hex package along side your project, or if you want to clone a package locally to track your changes and submit patches to the original author later.
Reset the Dependency
Once you’re finished debugging and want to restore the dependency to it’s normal state, simply clean it out and re-fetch it by running:
And everything will be reset back to how it was in the beginning.