[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: RE: Tracing dofile execution

From   "Martin Weiss" <>
To   <>
Subject   st: RE: Tracing dofile execution
Date   Tue, 9 Feb 2010 21:16:55 +0100


To be honest, I cannot see what the -program- adds to Stata in terms of
functionality - you can -trace- the execution of a do-file. I am sure I am
overlooking something...

One thing you may want to add is a line that appends the .do suffix in case
the user fails to specify it himself. Official -do- has this feature.


-----Original Message-----
[] On Behalf Of David Elliott
Sent: Dienstag, 9. Februar 2010 20:35
Subject: st: Tracing dofile execution

A frequent frustration I have is not being able to have -set trace on-
trace the executing lines of a dofile.  I've seen some discussions on
the list regarding this but no definitive solutions.  Michael Blasnik
created a little -stepdo- utility to emulate the trace function but it
chokes on //comment lines and multiline commands.  I decided to stop
whining and write a little utility of my own.  Basically, it turns the
dofile into a temporary adofile and then runs it under -set trace on-
conditions that can be user modified for depth and hiliting.  The
output is identical to an adofile trace because it IS an adofile
during the run.

x------------- begin code -------------x
program define dodebug
version 9.0

*! version 1.0.1  2010.02.09
*! Run a do-file with trace
*! by David C. Elliott

syntax using/ [, Depth(integer 1) Hilite(string)]

capture program drop dotemp

tempfile top bottom
file open top using `"`top'"', write text
file write top "program define dotemp" _n ///
    "version 9" _n ///
    `"noisily di "{res:{hline 10} begin debug {hline}}""' _n
file close top

file open bottom using `"`bottom'"', write text
file write bottom _n "set trace off" _n "end" _n
file close bottom

!copy "`top'"+"`using'"+"`bottom'" "`c(sysdir_personal)'dotemp.ado" /y /a

set trace on
set tracedepth `depth'
set tracehilite "`hilite'"
set trace off
noisily di "{res:{hline 10} end debug {hline}}"
erase "`c(sysdir_personal)'dotemp.ado"

x------------- end code -------------x

This runs fine under Windows but I have no way of testing in Mac or
*nix environments so I don't know if the file appending shell command
will work in all settings.

I experimented with trying to -file write- above and below the
existing text of a dofile without success leading me to apply the
!copy kludge to wrap the dofile wolf in adofile sheep's clothing.  If
someone can educate me how I could do this with -file write- in text
mode, I'd be most grateful.

Feedback would be appreciated and if there is a favorable response
regarding usefulness I may whip up a helpfile and submit this to SSC.


David Elliott MD, MSc
*   For searches and help try:

*   For searches and help try:

© Copyright 1996–2020 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index