[R] Parser For Line Number Tracing

Ivo Welch |vo@we|ch @end|ng |rom gm@||@com
Sun Jan 19 16:24:56 CET 2025


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.

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
>
>



More information about the R-help mailing list