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.

Reply via email to