Debugging in an Asynchronous World

mats cronqvist mats.cronqvist@REDACTED
Tue Feb 10 11:11:27 CET 2004


On Sun, 08 Feb 2004 23:44:41 +0100, Marc van Woerkom 
<marc.vanwoerkom@REDACTED> wrote:

> On Sun, 08 Feb 2004 18:33:05 +0100, Ulf Wiger <ulf.wiger@REDACTED> 
> wrote:
>
>> Well, one way to look at it is that they're validating
>> many of the design choices in Erlang.  (:
>
> I would lvoe to hear an Erlang point of view comment on this article:
>
>    Debugging in an Asynchronous World
>    Michael Donat, Silicon Chalk
>
>    Hard-to-track bugs can emerge when you can't guarantee sequential  
> execution.
>    The right tools and the right techniques can help.
>
>    http://acmqueue.com/modules.php?name=Content&pa=showpage&pid=63
>
> Regards,
> Marc

     marc,

   I found Donat's piece a pretty accurate description of what I've found 
working with the AXD301 (an Ericsson telephony switch, typically ~6 
cpus/erlang nodes, ~2000 concurrent erlang proceses, ~20 processes 
involved in a phone call, ~ half of them short-lived). Some comments;

  Donat recommends "aggressive use of assertations"; this is what the 
Erlangers call "let it crash". has been discussions about this on the list.

  He says "manual testing is simply too irregular, slow, and expensive"; 
this is of course perfectly true. we've found the OTP test server to be 
pretty indispensible. not sure if it is officially supported.

  Debuggers; we rarely use the OTP debugger (even though it is quite good, 
especially when run through distel, http://www.bluetail.com/~luke/distel), 
since our applications typically time out (making the debugger useless). 
for finding the "simple" bugs (i.e. no message passing, no timers) it 
works fine, for the hard bugs it's useless.

  Tracing is IMHO almost always The Right Thing. Some of Donats thoughts on 
tracing;
    "Keep the trace mechanism as simple as possible so you can minimize the 
number of OS calls you have to make."
    "Collect the trace in memory to make it as fast as possible."
    "Use a separate low-priority thread to write trace memory to disk."
  This pretty much describes the tracing in the Erlang emulator.

   Donat again; "Tracing everything will likely corrupt our results". The 
Erlang tracing has an extremely powerful (although perhaps somewhat 
obscure :>) selectivity mechanism called match specs. tracing can very 
light-weight if the selection does not kick in.

   We use a tool called "pan" developed in-house for taking, filtering and 
analyzing traces, it's in the jungerl (http://jungerl.sourceforge.net)
   short blurb; 
(http://cvs.sourceforge.net/viewcvs.py/*checkout*/jungerl/jungerl/lib/pan/doc/HOWTO.html?content-type=text%2Fplain).

   we use tracing/pan not only to find the hard bugs, but also to 
characterize and optimize the system.

     mats

   (apologies for stupid disclaimer below)

This communication is confidential and intended solely for the addressee(s). Any unauthorized review, use, disclosure or distribution is prohibited. If you believe this message has been sent to you in error, please notify the sender by replying to this transmission and delete the message without disclosing it. Thank you.

E-mail including attachments is susceptible to data corruption, interruption, unauthorized amendment, tampering and viruses, and we only send and receive e-mails on the basis that we are not liable for any such corruption, interception, amendment, tampering or viruses or any consequences thereof.




More information about the erlang-questions mailing list