This function returns the native stack trace as a data frame. Each native stack frame corresponds to one row in the returned data frame. Deep function calls come first, the last row corresponds to the running process's entry point.

winch_trace_back()

Value

A data frame with the columns:

  • func: function name

  • ip: instruction pointer

  • pathname: path to shared library

  • is_libr: a logical, TRUE if this entry is from R's shared library, determined via procmaps::path_is_libr() on the pathname component

Details

On Windows, call winch_init_library() to return function names for a specific package.

See also

sys.calls() for the R equivalent.

Examples

winch_trace_back()
#>                                func               ip
#> 1                       bcEval_loop 00007f7f08b3de50
#> 2                            bcEval 00007f7f08b51370
#> 3                           Rf_eval 00007f7f08b517c0
#> 4                     R_execClosure 00007f7f08b538a0
#> 5                 applyClosure_core 00007f7f08b54850
#> 6                           Rf_eval 00007f7f08b517c0
#> 7                           do_eval 00007f7f08b57dd0
#> 8                       bcEval_loop 00007f7f08b3de50
#> 9                            bcEval 00007f7f08b51370
#> 10                          Rf_eval 00007f7f08b517c0
#> 11              forcePromise.part.0 00007f7f08b521e0
#> 12                          Rf_eval 00007f7f08b517c0
#> 13                   do_withVisible 00007f7f08b58a30
#> 14                      do_internal 00007f7f08b9de60
#> 15                      bcEval_loop 00007f7f08b3de50
#> 16                           bcEval 00007f7f08b51370
#> 17                          Rf_eval 00007f7f08b517c0
#> 18              forcePromise.part.0 00007f7f08b521e0
#> 19                          Rf_eval 00007f7f08b517c0
#> 20              forcePromise.part.0 00007f7f08b521e0
#> 21                           getvar 00007f7f08b523e0
#> 22                      bcEval_loop 00007f7f08b3de50
#> 23                           bcEval 00007f7f08b51370
#> 24                          Rf_eval 00007f7f08b517c0
#> 25                    R_execClosure 00007f7f08b538a0
#> 26                applyClosure_core 00007f7f08b54850
#> 27                          Rf_eval 00007f7f08b517c0
#> 28                          do_eval 00007f7f08b57dd0
#> 29                      bcEval_loop 00007f7f08b3de50
#> 30                           bcEval 00007f7f08b51370
#> 31                          Rf_eval 00007f7f08b517c0
#> 32                    R_execClosure 00007f7f08b538a0
#> 33                applyClosure_core 00007f7f08b54850
#> 34                   R_forceAndCall 00007f7f08b570e0
#> 35                     R_init_purrr 00007f7f03291b70
#> 36                     R_init_purrr 00007f7f03291d80
#> 37                      R_doDotCall 00007f7f08b01c20
#> 38                       do_dotcall 00007f7f08b03840
#> 39                          Rf_eval 00007f7f08b517c0
#> 40 <unw_get_proc_name() error: -10> 00007f7f0328fbc0
#> 41                R_ExecWithCleanup 00007f7f08aea500
#> 42 <unw_get_proc_name() error: -10> 00007f7f0328fe60
#> 43 <unw_get_proc_name() error: -10> 00007f7f0328ff10
#> 44                      R_doDotCall 00007f7f08b01c20
#> 45                      bcEval_loop 00007f7f08b3de50
#> 46                           bcEval 00007f7f08b51370
#> 47                          Rf_eval 00007f7f08b517c0
#> 48                    R_execClosure 00007f7f08b538a0
#> 49                applyClosure_core 00007f7f08b54850
#> 50                          Rf_eval 00007f7f08b517c0
#> 51                 Rf_ReplIteration 00007f7f08b8ba90
#> 52                    R_ReplConsole 00007f7f08b8bfb0
#> 53                    run_Rmainloop 00007f7f08b8c0a0
#> 54                             main 0000564588a03080
#> 55                __libc_init_first 00007f7f0862a150
#> 56                __libc_start_main 00007f7f0862a200
#> 57                           _start 0000564588a030b0
#>                                               pathname is_libr
#> 1                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 2                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 3                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 4                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 5                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 6                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 7                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 8                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 9                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 10                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 11                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 12                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 13                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 14                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 15                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 16                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 17                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 18                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 19                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 20                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 21                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 22                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 23                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 24                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 25                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 26                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 27                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 28                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 29                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 30                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 31                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 32                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 33                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 34                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 35 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 36 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 37                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 38                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 39                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 40 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 41                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 42 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 43 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 44                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 45                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 46                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 47                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 48                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 49                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 50                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 51                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 52                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 53                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 54                       /opt/R/4.5.0/lib/R/bin/exec/R    TRUE
#> 55                 /usr/lib/x86_64-linux-gnu/libc.so.6   FALSE
#> 56                 /usr/lib/x86_64-linux-gnu/libc.so.6   FALSE
#> 57                       /opt/R/4.5.0/lib/R/bin/exec/R    TRUE

foo <- function() {
  winch_call(bar)
}

bar <- function() {
  winch_trace_back()
}

foo()
#>                                func               ip
#> 1                       bcEval_loop 00007f7f08b3de50
#> 2                            bcEval 00007f7f08b51370
#> 3                           Rf_eval 00007f7f08b517c0
#> 4                     R_execClosure 00007f7f08b538a0
#> 5                 applyClosure_core 00007f7f08b54850
#> 6                           Rf_eval 00007f7f08b517c0
#> 7                          do_begin 00007f7f08b55590
#> 8                           Rf_eval 00007f7f08b517c0
#> 9                     R_execClosure 00007f7f08b538a0
#> 10                applyClosure_core 00007f7f08b54850
#> 11                          Rf_eval 00007f7f08b517c0
#> 12                       winch_call 00007f7ee5e37970
#> 13                      R_doDotCall 00007f7f08b01c20
#> 14                      bcEval_loop 00007f7f08b3de50
#> 15                           bcEval 00007f7f08b51370
#> 16                          Rf_eval 00007f7f08b517c0
#> 17                    R_execClosure 00007f7f08b538a0
#> 18                applyClosure_core 00007f7f08b54850
#> 19                          Rf_eval 00007f7f08b517c0
#> 20                         do_begin 00007f7f08b55590
#> 21                          Rf_eval 00007f7f08b517c0
#> 22                    R_execClosure 00007f7f08b538a0
#> 23                applyClosure_core 00007f7f08b54850
#> 24                          Rf_eval 00007f7f08b517c0
#> 25                          do_eval 00007f7f08b57dd0
#> 26                      bcEval_loop 00007f7f08b3de50
#> 27                           bcEval 00007f7f08b51370
#> 28                          Rf_eval 00007f7f08b517c0
#> 29              forcePromise.part.0 00007f7f08b521e0
#> 30                          Rf_eval 00007f7f08b517c0
#> 31                   do_withVisible 00007f7f08b58a30
#> 32                      do_internal 00007f7f08b9de60
#> 33                      bcEval_loop 00007f7f08b3de50
#> 34                           bcEval 00007f7f08b51370
#> 35                          Rf_eval 00007f7f08b517c0
#> 36              forcePromise.part.0 00007f7f08b521e0
#> 37                          Rf_eval 00007f7f08b517c0
#> 38              forcePromise.part.0 00007f7f08b521e0
#> 39                           getvar 00007f7f08b523e0
#> 40                      bcEval_loop 00007f7f08b3de50
#> 41                           bcEval 00007f7f08b51370
#> 42                          Rf_eval 00007f7f08b517c0
#> 43                    R_execClosure 00007f7f08b538a0
#> 44                applyClosure_core 00007f7f08b54850
#> 45                          Rf_eval 00007f7f08b517c0
#> 46                          do_eval 00007f7f08b57dd0
#> 47                      bcEval_loop 00007f7f08b3de50
#> 48                           bcEval 00007f7f08b51370
#> 49                          Rf_eval 00007f7f08b517c0
#> 50                    R_execClosure 00007f7f08b538a0
#> 51                applyClosure_core 00007f7f08b54850
#> 52                   R_forceAndCall 00007f7f08b570e0
#> 53                     R_init_purrr 00007f7f03291b70
#> 54                     R_init_purrr 00007f7f03291d80
#> 55                      R_doDotCall 00007f7f08b01c20
#> 56                       do_dotcall 00007f7f08b03840
#> 57                          Rf_eval 00007f7f08b517c0
#> 58 <unw_get_proc_name() error: -10> 00007f7f0328fbc0
#> 59                R_ExecWithCleanup 00007f7f08aea500
#> 60 <unw_get_proc_name() error: -10> 00007f7f0328fe60
#> 61 <unw_get_proc_name() error: -10> 00007f7f0328ff10
#> 62                      R_doDotCall 00007f7f08b01c20
#> 63                      bcEval_loop 00007f7f08b3de50
#> 64                           bcEval 00007f7f08b51370
#> 65                          Rf_eval 00007f7f08b517c0
#> 66                    R_execClosure 00007f7f08b538a0
#> 67                applyClosure_core 00007f7f08b54850
#> 68                          Rf_eval 00007f7f08b517c0
#> 69                 Rf_ReplIteration 00007f7f08b8ba90
#> 70                    R_ReplConsole 00007f7f08b8bfb0
#> 71                    run_Rmainloop 00007f7f08b8c0a0
#> 72                             main 0000564588a03080
#> 73                __libc_init_first 00007f7f0862a150
#> 74                __libc_start_main 00007f7f0862a200
#> 75                           _start 0000564588a030b0
#>                                               pathname is_libr
#> 1                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 2                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 3                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 4                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 5                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 6                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 7                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 8                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 9                       /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 10                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 11                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 12 /home/runner/work/_temp/Library/winch/libs/winch.so   FALSE
#> 13                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 14                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 15                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 16                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 17                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 18                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 19                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 20                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 21                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 22                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 23                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 24                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 25                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 26                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 27                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 28                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 29                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 30                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 31                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 32                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 33                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 34                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 35                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 36                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 37                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 38                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 39                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 40                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 41                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 42                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 43                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 44                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 45                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 46                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 47                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 48                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 49                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 50                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 51                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 52                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 53 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 54 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 55                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 56                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 57                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 58 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 59                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 60 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 61 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 62                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 63                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 64                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 65                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 66                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 67                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 68                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 69                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 70                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 71                      /opt/R/4.5.0/lib/R/lib/libR.so    TRUE
#> 72                       /opt/R/4.5.0/lib/R/bin/exec/R    TRUE
#> 73                 /usr/lib/x86_64-linux-gnu/libc.so.6   FALSE
#> 74                 /usr/lib/x86_64-linux-gnu/libc.so.6   FALSE
#> 75                       /opt/R/4.5.0/lib/R/bin/exec/R    TRUE