Hi,
On Oct 23, 2009, at 2:39 PM, Gabor Grothendieck wrote:
On Fri, Oct 23, 2009 at 2:34 PM, Duncan Murdoch
<murd...@stats.uwo.ca> wrote:
On 10/23/2009 2:27 PM, Gabor Grothendieck wrote:
I have often wanted to get such a list as well without having to
write
code myself. If a function which automatically iterated over all
possible objects and listed out the ones that being debugged were
available in the core it would be useful. Even if its slow this
would
be used at debug time and not a production time so it would not be
too
bad. Even a heuristic that checked likely locations, e.g. just the
global environment, but not all locations might be useful.
If you look at the code in setBreakpoint, it does a search for
functions in
lots of places (but not everywhere). You could start from that.
Generally speaking, it's quite hard to think of a way to express
what the
answer would look like to a perfectly general function like you're
asking
for. Suppose a function lives in the parent environment of the
environment
of an expression that was returned in the result of a call to lm
that is a
local variable in the function that called the function where you
are asking
the question: how would you return that as an answer??? In a
language with
pointers, you'd just return a pointer to it, but R doesn't have
those.
I agree its problematic but it would still be useful since after you
have debugged a number of functions its easy to forget which ones are
being debugged.
If this is something you just want to use on your own functions that
are set to `debug`, why not just make write a debug wraps the
base::debug and does some keeps track of which functions you're
debugging in some global environment variable (of your creation).
You should probably use something beside "substitute" here, but:
R> .DLIST <- character()
R> debug <- function(fun, text="", condition=NULL) {
.DLIST <<- c(.DLIST, substitute(fun))
base::debug(fun, text=text, condition=condition)
}
R> myfun <- function(something) {
a <- length(something)
b <- sum(something)
b
}
R> debug(myfun)
R> debug(myfun)
R> .DLIST
[[1]]
myfun
R> myfun(1:10)
debugging in: myfun(1:10)
debug: {
a <- length(something)
b <- sum(something)
b
}
Browse[2]> n
debug: a <- length(something)
Browse[2]> n
debug: b <- sum(something)
Browse[2]> n
debug: b
Browse[2]> n
exiting from: myfun(1:10)
[1] 55
You can define your own undebug function accordingly.
Would that do what you want?
-steve
--
Steve Lianoglou
Graduate Student: Computational Systems Biology
| Memorial Sloan-Kettering Cancer Center
| Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.