[erlang-questions] Debugging apps with dependencies

Garret Smith garret.smith@REDACTED
Tue May 1 01:11:59 CEST 2012


Declaring the dependencies in your .app.src file is the most idiomatic way
I've seen, and they get started for you by the boot script so you don't
have to worry about coding that yourself.  See the 'applications' list for
the list of applications that should be started before yours.

{{modules}} is a rebar macro that will be replaced with the module names
from your project.
You have to fill in the 'registered' list yourself.

example app.src:
{application, myapp,
 [{description, "My Erlang App"},
  {vsn, "1.0.0"},
  {modules, [{{modules}}]},
  {registered, [registered_process_names]},
  {applications, [kernel, stdlib, sasl, mnesia, yaws]},
  {mod, {app_callback_module, []}}
 ]
}.

For the appmon problem, 1st I recommend using 'observer' instead.  I just
started using it with R15B01 and... wow.  The tracing support is
phenomenal.  Go Erlang devs!

To get observer included in your release, add it to your reltool.config
like so:

{app, observer, [{incl_cond, include}]},

-Garret Smith

On Mon, Apr 30, 2012 at 12:00 PM, Josh Black <raskchanky@REDACTED> wrote:

>  Excellent!  Thanks Tristan and Bob for the suggestions.  I'll try them
> out.  Is either one considered more idiomatic?
>
> On Monday, April 30, 2012 at 11:48 AM, Tristan Sloughter wrote:
>
> Correct about why you can't find appmon, but there is an easy way around
> this. Start the release yourself, you probably have to add your libs to
> ERL_LIBS first depending how how you have things setup. So like:
>
> $ export ERL_LIBS=$ERL_LIBS:<path to dir with your compiled apps>
> $ erl -boot <path to boot file>
>
> This will have your release running in your main erts env, not one created
> specifically for your release.
>
> Someone else can probably give better instructions based on where rebar
> places the libs and .boot file, I don't know those.
>
> Tristan
>
> On Mon, Apr 30, 2012 at 1:05 PM, Josh Black <raskchanky@REDACTED> wrote:
>
> Hi, erlang beginner here.
>
> I have a question about the best way to debug apps which include
> dependencies.
>
> I'm working on an app, and so far, I've been testing it by using rebar to
> generate a release, then starting a console for the release and going from
> there.  The problem comes when I want to use something like dbg or appmon
> to debug errors or inspect the state of my app.  When I try to do, e.g.
> appmon:start() from the console for my release, it tells me "undefined
> function appmon:start/0".  I'm guessing this is because I didn't explicitly
> specify appmon in my release configuration?
>
> Alternatively, I created a start.sh shell script with contents like this:
>
> erl -pa apps/*/ebin -pa deps/*/ebin -eval 'application:start(dependency1),
> application:start(dependency2), application:start(myapp).'
>
> This lets me start appmon and whatever else I want when I run into errors,
> but feels pretty messy and wrong.
>
> I feel like I'm missing something really obvious here.  What's the correct
> way to do this?
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120430/027f38f3/attachment.htm>


More information about the erlang-questions mailing list