[R] [External] Re: Parser For Line Number Tracing
J C Nash
pro|jcn@@h @end|ng |rom gm@||@com
Tue Jan 21 18:39:55 CET 2025
Thanks Duncan for being a bulldog on this issue. Finding bugs like this take
energy and tenacity.
JN
On 2025-01-21 11:40, Duncan Murdoch wrote:
> And now I've found the elusive bug in show.error.locations = TRUE as well, and posted a patch for that too.
>
> Back to the original topic of this thread: I think most users should routinely use
>
> options(show.error.locations = TRUE)
>
> e.g. in their .Rprofile.
>
> That will often speed up bug fixes, especially if my patch is incorporated.
>
> Duncan Murdoch
>
>
>
> On 2025-01-20 5:56 p.m., Duncan Murdoch wrote:
>> I've posted a patch to bugs.r-project.org that fixes the traceback()
>> issue. It's not specific to findFun3; you get the same problem with
>> errors from expressions like
>>
>> 1 + "a"
>>
>> In my testing, I occasionally saw cases where show.error.locations =
>> TRUE didn't work. I'll try to track down a reproducible case, and
>> perhaps a patch to fix it.
>>
>> Duncan Murdoch
>>
>>
>>
>> On 2025-01-20 9:37 a.m., Duncan Murdoch wrote:
>>> Sorry, I'm not seeing the first problem now:
>>> options(show.error.locations = TRUE) works fine. Not sure what I did
>>> wrong before.
>>>
>>> I'm still seeing `traceback()` failing to report the attempt to call
>>> nofunction(). I suppose this is because a context is never set up for
>>> the failed call. Perhaps findFun3 could set up a fake context so that
>>> traceback() adds one more entry?
>>>
>>> Duncan Murdoch
>>>
>>>
>>> On 2025-01-19 3:39 p.m., Duncan Murdoch wrote:
>>>> Thanks for pointing out the options. Using
>>>>
>>>> options(show.error.locations = TRUE)
>>>>
>>>> works on Ivo's example, but it doesn't show a location if the error
>>>> happens in a function that doesn't have srcrefs, because the known
>>>> location isn't on the top of the stack.
>>>>
>>>> Perhaps TRUE (and maybe "top"?) should look back through the stack until
>>>> it finds a known location, and report that, or another option (e.g.
>>>> "highest"?) could be added to do that.
>>>>
>>>> And still I think traceback() should show the top call in Ivo's example.
>>>>
>>>> Duncan
>>>>
>>>>
>>>> On 2025-01-19 11:46 a.m., 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.
>>>>>>
>>>>>
>>>>
>>>
>>
>
> ______________________________________________
> 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.
More information about the R-help
mailing list