[ESS] ess-tracebug behavior [probably wishlist]
Ross Boylan
ross at biostat.ucsf.edu
Sat May 4 03:38:02 CEST 2013
On 4/24/2013 1:21 PM, Vitalie Spinu wrote:
> Hi Ross,
>
> Dev ESS has now true toggleble breakpoints that you can
> activate/deactivate during the debug session without the need of
> re-sourcing. Toggling is bound to C-c C-t o.
>
> I have also much improved the ess-dbg-flag-for-debugging. It sees all
> the functions from the current context, and all the internal functions
> in the namespaces of the packages listed in ess-developer-packages. So,
> if you are on SVN or git please test the stuff out. I would be happy to
> hear your comments.
I am now using the latest git: 650a142597a3be857407e180381acf617f333676.
C-c C-t d to debug a function. It was exported from a package, and did
appear on the autocompletion list.
I did enter the debugger when I hit it, though no special code display.
The status area of emacs listed a bunch of keys like (M)-N for next. I
hit Esc-n and got an error"M-n is undefined". If I enter the R window
I can debug in the usual R way. Apparently Esc-N (uppercase) works;
having to hit the shift key for a basic debugging operation is awkward.
I wanted to trace into a function that had not been exported. C-c C-t d
did have it on the completion list--impressive. However, although it
told me it had set debugging, I did not actually get a debugger on it.
I typed n in the debugger prompt and it simply returned
(mice.impute.2lmixed.logit was the inner function I was trying to debug):
debug: type <- c(2, type)
Browse[2]>
debug: if (any(type == 1)) return(mice.impute.2lmixed.logit(y, ry, x,
type))
Browse[2]> any(type==1) # set debug on mice.impute.2lmixed.logit here
[1] TRUE
Browse[2]> n
debug: return(mice.impute.2lmixed.logit(y, ry, x, type))
I tried using debugonce() from the command line in the debugger; it too was ineffective.
I verified that when I'm at top level the non-exported function is not in the completion list of functions to debug.
After using ess-developer on the package (C-c C-t a mice) the private
function is part of the completion list for C-c C-t d at the top level.
I thought the first time I tried this it did not stop, but when I try to
reproduce it's OK. However, the completion lists the function twice,
once as mice.impute2l.mixed.logit and once as
mice::mice.impute.2lmixed.logit.
C-c C-t D did not remove the debugging from the function. Actually, I'm
not sure the uppercase D is getting through; when it was echoing I only
saw a lower case d, and the status message is "flagged for debugging"
after I select the function.
Some possible extensions
C-c C-t D (unflag for debugging) lists all functions; it would be nice
if it only listed ones actually flagged for debugging. BTW, is typing
undebug(foo) equivalent to C-c C-t D foo?
C-u C-t d does debugonce.
For the record:
options(deparse.max.lines) limits the stack trace (an R, not ESS,
feature). It's only partly effective, limiting the stack trace but not
the function body dump as you enter the browser.
Ross Boylan
More information about the ESS-help
mailing list