MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: problem writing debugging utility function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg100274] Re: problem writing debugging utility function
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Sun, 31 May 2009 06:31:05 -0400 (EDT)
  • References: <gvq09k$mqv$1@smc.vnet.net>

dabrowsa at indiana.edu wrote:
> This matter is pretty unimportant, but perhaps of interest in laying
> out a persistent source confusion for me with Mathematica: evaluation
> control.
> 
> I'm skeptical of the built-in debugger because it seems to crash the
> kernel often, so I do most of my debugging by inserting print
> statements like
> 
>     Print["variableOne = ",variableOne].
> 
> Being extraordinarily lazy I soon thought it might be nice to have a
> little function, say dbgv, which takes a variable or name of a
> variable as an argument, and produces the same result as the print
> statement above.
> 
> At first I assumed this would be easy, since almost every programming
> problem turns out to be pretty easy with Mathematica.  But after an hour
> or so I began to wonder whether it would be possible at all.  I did
> eventually find a solution, a function dbgv such that dbgv[variableOne]
> produces exactly the effect of the print statement, but it's really ugly.
> I'll post it later.
> 
> Granted this is not an important problem since it's not too much
> trouble to just type in the whole print statement.  But it's worth
> noting that this would trivial to solve with a Lisp macro, and despite
> the fantastic expressibility of Mathematica it doesn't seem to have a
> good replacement for macros.  The closest equivalents are $Pre(Read),
> which I used in my solution, but they're not nearly as nice to work with.
> 
> Can anyone think of an elegant solution?
> 

For a function that works like the Print expression above, one could use 
one of the following:

Non-string version:

SetAttributes[dbg, HoldAll]
dbg[var_] := Print[ToString[Unevaluated[var]], " = ", var]

String version:

dbg2[name_String] :=
  ToExpression[name, InputForm, Print[name, " = ", #] &]

Though I am not sure I understand your question because I don't see what 
relation $Pre or Read have with this.

For debugging, take a look at Trace, On[] and Off[], and Monitor as well.


  • Prev by Date: Re: Re: volume calculation
  • Next by Date: Re: Image[], Graphics[Raster[]]
  • Previous by thread: Re: problem writing debugging utility function
  • Next by thread: Mollier