Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Capture and relay call frames on errors #478

Open
HenrikBengtsson opened this issue Mar 13, 2021 · 2 comments
Open

Capture and relay call frames on errors #478

HenrikBengtsson opened this issue Mar 13, 2021 · 2 comments

Comments

@HenrikBengtsson
Copy link
Owner

Idea

> options(error = function() utils::recover())
> foo <- function(x, a = 2) a * x
> f <- future(foo("y"))
> v <- value(f)
Error in a * x : non-numeric argument to binary operator
Enter a frame number, or 0 to exit   
1: foo("y")
2: HenrikBengtsson/future-ideas#1: (function () 
utils::recover())()

Selection: 1
Called from: top level 
Browse[1]> ls.str()
a :  num 2
x :  chr "y"
Browse[1]> 

The idea is to have the future record the full recover stack in the FutureResult object. Something like the info in:

tb <- .traceback(NULL)
if (is.null(tb)) tb <- .traceback(2L)
utils::dump.frames(dumpto = "frames", to.file = FALSE)

and then regenerate this call stack when relaying the error on the parent R process. I'm not sure if/not the latter can be done, but if we can figure it out, it'll be super cool.

It might be expensive to transfer all call stacks back from the worker to the main R session when running in parallel, so maybe this needs to be enabled via an option, e.g. options(future.recover.enable = TRUE). It might be that we can enable it by default for sequential futures.

See also

#253

@HenrikBengtsson
Copy link
Owner Author

Maybe the first is to just record the above info in the future result

@HenrikBengtsson
Copy link
Owner Author

utils::debugger(). h/t https://github.com/gfkse/bettermc/

@HenrikBengtsson HenrikBengtsson transferred this issue from another repository Mar 25, 2021
@HenrikBengtsson HenrikBengtsson changed the title future: record recover() info on errors Capture and relay call frames on errors Mar 25, 2021
@HenrikBengtsson HenrikBengtsson transferred this issue from another repository Mar 25, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant