[R] [External] Re: Parser For Line Number Tracing

Ivo Welch |vo@we|ch @end|ng |rom gm@||@com
Sun Jan 19 18:01:26 CET 2025


understood.

but, please, consider not people like me but unwary beginners and
students of R.  I have used R now for decades, and even I am baffled
by it.  Couldn't you make R code easier to debug not only for people
like me (who can indeed tweak their environments) but also for novice
users?

On Sun, Jan 19, 2025 at 8:46 AM <luke-tierney using uiowa.edu> wrote:
>
> On Sun, 19 Jan 2025, Ivo Welch wrote:
>
> > Hi Duncan — Wonderful.  Thank you.  Bug or no bug, I think it would be
> > a huge improvement for user-friendliness if R printed the last line by
> > default *every time* a script dies.  Most computer languages do so.
> >
> > Should I file it as a request for improvement to the R code
> > development team?  Maybe R can be improved at a very low cost to the
> > development team and a very high benefit to newbies.
>
> No. There are already many ways to influence the way the default error
> handler prints information about errors, mstly via options(). In
> particular you may want to look at entries in ?options for
>
> show.error.locations
> showErrorCalls
> showWarningCalls
>
> and adjust your options settings accordingly.
>
> Best,
>
> luke
>
> >
> > Regards,
> >
> > /ivo
> >
> > On Sun, Jan 19, 2025 at 2:39 AM Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
> >>
> >> On 2025-01-18 8:27 p.m., Ivo Welch wrote:
> >>> I am afraid my errors are worse!  (so are my postings.  I should have
> >>> given an example.)
> >>>
> >>> ```
> >>> x <- 1
> >>> y <- 2
> >>> nofunction("something stupid I am doing!")
> >>> z <- 4
> >>> ```
> >>>
> >>> and
> >>>
> >>> ```
> >>>> source("where-is-my-water.R")
> >>> Error in nofunction("something stupid I am doing!") :
> >>>    could not find function "nofunction"
> >>> ```
> >>>
> >>> and no traceback is available.
> >>
> >> Okay, I see.  In that case traceback() doesn't report the line, but it
> >> still is known internally.  You can see it using the following function:
> >>
> >> showKnownLocations <- function() {
> >>    calls <- sys.calls()
> >>    srcrefs <- sapply(calls, function(v) if (!is.null(srcref <- attr(v,
> >>
> >> "srcref"))) {
> >>      srcfile <- attr(srcref, "srcfile")
> >>      paste0(basename(srcfile$filename), "#", srcref[1L])
> >>    } else ".")
> >>    cat("Current call stack locations:\n")
> >>    cat(srcrefs, sep = " ")
> >>    cat("\n")
> >> }
> >>
> >> I haven't done much testing on this, but I think it can be called
> >> explicitly from any location if you want to know how you got there, or
> >> you can set it as the error handler using
> >>
> >>    options(error = showKnownLocations)
> >>
> >> For example, try this script:
> >>
> >>    options(error = showKnownLocations)
> >>    f <- function() showKnownLocations()
> >>    x <- 1
> >>    f()
> >>    y <- 2
> >>    nofunction("something stupid I am doing!")
> >>    z <- 4
> >>
> >> I see this output from source("test.R"):
> >>
> >>   > source("test.R")
> >>    Current call stack locations:
> >>    . . . . test.R#4 test.R#2
> >>    Error in nofunction("something stupid I am doing!") :
> >>      could not find function "nofunction"
> >>    Current call stack locations:
> >>    . . . . test.R#6
> >>
> >> The first report is from the explicit call in f() on line 2 that was
> >> invoked on line 4, and the second report happens during error handling.
> >>
> >> I supppose the fact that traceback() isn't showing you the line 6
> >> location could be considered a bug.
> >>
> >> Duncan Murdoch
> >>
> >>
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide https://www.r-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
> --
> Luke Tierney
> Ralph E. Wareham Professor of Mathematical Sciences
> University of Iowa                  Phone:             319-335-3386
> Department of Statistics and        Fax:               319-335-3017
>     Actuarial Science
> 241 Schaeffer Hall                  email:   luke-tierney using uiowa.edu
> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu/



More information about the R-help mailing list