Josh Burroughs (qhool)

home

Introducing Quaff [...the Elixir]

10 Feb 2014

Quaff can run your Elixir code in the graphical debugger, and import constants from your .hrl files.

Quaff, available from github: https://github.com/qhool/quaff, is a set of tools for integrating Elixir into erlang applications (or vice versa). So far it has Quaff.Constants, which lets you import constant -defines from erlang .hrls, and Quaff.Debug, a helper for the erlang graphical debugger (it implements the method I discussed in my previous post).

Everything from here on in is reproduced from the Quaff readme, so feel free to hop on over there at any time.

Quaff.Constants

This module parses erlang header files, and imports any constants as @ attributes. A constant means a -define macro which evaluates to a constant term, and takes no arguments (though it may use macros which accept arguments). Constants whose names start with a capital letter will have an underscore prepended, for compatibility with Elixir syntax.

app/include/app_header.hrl:

-define(CONSTANT_FROM_APP,5)

lib/mymodule.ex:

defmodule MyModule
  require Quaff.Constants
  Quaff.Constants.include_lib("app/include/app_header.hrl")

  def myfunc() do
    @_CONSTANT_FROM_APP + 10
  end
end

Quaff.Debug

The Debug module provides a simple helper interface for running Elixir code in the erlang graphical debugger, using the technique I described in this posting.

Interactive Elixir (0.12.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>  Quaff.Debug.start() #start the graphical debugger
{:ok, #PID<0.59.0>}
iex(2)>  Quaff.Debug.load("./lib/mymodule.ex") #load all modules in source file
lib/mymodule.ex:1: redefining module My.Module
lib/mymodule.ex:212: redefining module My.OtherModule
[module: My.Module, module: My.OtherModule]
iex(3)>  Quaff.Debug.load(Yet.AnotherModule) #load a module by name
{:module, Yet.AnotherModule}

Also provided is nload(module) (equivalent to load(module, all_nodes: true)), which debugs the module[s] on all known nodes.

comments powered by Disqus