entrace() interrupts an error throw to add an rlang backtrace to the error. The error throw is immediately resumed. cnd_entrace() adds a backtrace to a condition object, without any other effect. Both functions should be called directly from an error handler.

Set the error global option to quote(rlang::entrace()) to transform base errors to rlang errors. These enriched errors include a backtrace. The RProfile is a good place to set the handler.

entrace() also works as a calling handler, though it is often more practical to use the higher-level function with_abort().

entrace(cnd, ..., top = NULL, bottom = NULL)

cnd_entrace(cnd, ..., top = NULL, bottom = NULL)



When entrace() is used as a calling handler, cnd is the condition to handle.


Unused. These dots are for future extensions.


The first frame environment to be included in the backtrace. This becomes the top of the backtrace tree and represents the oldest call in the backtrace.

This is needed in particular when you call trace_back() indirectly or from a larger context, for example in tests or inside an RMarkdown document where you don't want all of the knitr evaluation mechanisms to appear in the backtrace.


The last frame environment to be included in the backtrace. This becomes the rightmost leaf of the backtrace tree and represents the youngest call in the backtrace.

Set this when you would like to capture a backtrace without the capture context.

Can also be an integer that will be passed to caller_env().

See also

with_abort() to promote conditions to rlang errors. cnd_entrace() to manually add a backtrace to a condition.


if (FALSE) { # Not run # Set the error handler in your RProfile like this: if (requireNamespace("rlang", quietly = TRUE)) { options(error = rlang::entrace) } }