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 00007f8c1af3dfb0
#> 2                            bcEval 00007f8c1af514d0
#> 3                           Rf_eval 00007f8c1af51920
#> 4                     R_execClosure 00007f8c1af53a00
#> 5                 applyClosure_core 00007f8c1af549b0
#> 6                           Rf_eval 00007f8c1af51920
#> 7                           do_eval 00007f8c1af57f30
#> 8                       bcEval_loop 00007f8c1af3dfb0
#> 9                            bcEval 00007f8c1af514d0
#> 10                          Rf_eval 00007f8c1af51920
#> 11              forcePromise.part.0 00007f8c1af52340
#> 12                          Rf_eval 00007f8c1af51920
#> 13                   do_withVisible 00007f8c1af58b90
#> 14                      do_internal 00007f8c1af9dfc0
#> 15                      bcEval_loop 00007f8c1af3dfb0
#> 16                           bcEval 00007f8c1af514d0
#> 17                          Rf_eval 00007f8c1af51920
#> 18              forcePromise.part.0 00007f8c1af52340
#> 19                          Rf_eval 00007f8c1af51920
#> 20              forcePromise.part.0 00007f8c1af52340
#> 21                           getvar 00007f8c1af52540
#> 22                      bcEval_loop 00007f8c1af3dfb0
#> 23                           bcEval 00007f8c1af514d0
#> 24                          Rf_eval 00007f8c1af51920
#> 25                    R_execClosure 00007f8c1af53a00
#> 26                applyClosure_core 00007f8c1af549b0
#> 27                          Rf_eval 00007f8c1af51920
#> 28                          do_eval 00007f8c1af57f30
#> 29                      bcEval_loop 00007f8c1af3dfb0
#> 30                           bcEval 00007f8c1af514d0
#> 31                          Rf_eval 00007f8c1af51920
#> 32                    R_execClosure 00007f8c1af53a00
#> 33                applyClosure_core 00007f8c1af549b0
#> 34                   R_forceAndCall 00007f8c1af57240
#> 35                     R_init_purrr 00007f8c15691b70
#> 36                     R_init_purrr 00007f8c15691d80
#> 37                      R_doDotCall 00007f8c1af01c20
#> 38                       do_dotcall 00007f8c1af03840
#> 39                          Rf_eval 00007f8c1af51920
#> 40 <unw_get_proc_name() error: -10> 00007f8c1568fbc0
#> 41                R_ExecWithCleanup 00007f8c1aeea500
#> 42 <unw_get_proc_name() error: -10> 00007f8c1568fe60
#> 43 <unw_get_proc_name() error: -10> 00007f8c1568ff10
#> 44                      R_doDotCall 00007f8c1af01c20
#> 45                      bcEval_loop 00007f8c1af3dfb0
#> 46                           bcEval 00007f8c1af514d0
#> 47                          Rf_eval 00007f8c1af51920
#> 48                    R_execClosure 00007f8c1af53a00
#> 49                applyClosure_core 00007f8c1af549b0
#> 50                          Rf_eval 00007f8c1af51920
#> 51                 Rf_ReplIteration 00007f8c1af8bbf0
#> 52                    R_ReplConsole 00007f8c1af8c110
#> 53                    run_Rmainloop 00007f8c1af8c200
#> 54                             main 000055f51138f080
#> 55                __libc_init_first 00007f8c1aa2a150
#> 56                __libc_start_main 00007f8c1aa2a200
#> 57                           _start 000055f51138f0b0
#>                                               pathname is_libr
#> 1                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 2                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 3                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 4                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 5                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 6                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 7                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 8                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 9                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 10                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 11                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 12                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 13                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 14                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 15                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 16                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 17                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 18                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 19                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 20                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 21                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 22                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 23                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 24                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 25                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 26                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 27                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 28                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 29                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 30                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 31                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 32                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 33                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 34                      /opt/R/4.5.1/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.1/lib/R/lib/libR.so    TRUE
#> 38                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 39                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 40 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 41                      /opt/R/4.5.1/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.1/lib/R/lib/libR.so    TRUE
#> 45                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 46                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 47                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 48                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 49                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 50                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 51                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 52                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 53                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 54                       /opt/R/4.5.1/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.1/lib/R/bin/exec/R    TRUE

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

bar <- function() {
  winch_trace_back()
}

foo()
#>                                func               ip
#> 1                       bcEval_loop 00007f8c1af3dfb0
#> 2                            bcEval 00007f8c1af514d0
#> 3                           Rf_eval 00007f8c1af51920
#> 4                     R_execClosure 00007f8c1af53a00
#> 5                 applyClosure_core 00007f8c1af549b0
#> 6                           Rf_eval 00007f8c1af51920
#> 7                          do_begin 00007f8c1af556f0
#> 8                           Rf_eval 00007f8c1af51920
#> 9                     R_execClosure 00007f8c1af53a00
#> 10                applyClosure_core 00007f8c1af549b0
#> 11                          Rf_eval 00007f8c1af51920
#> 12                       winch_call 00007f8c0a413970
#> 13                      R_doDotCall 00007f8c1af01c20
#> 14                      bcEval_loop 00007f8c1af3dfb0
#> 15                           bcEval 00007f8c1af514d0
#> 16                          Rf_eval 00007f8c1af51920
#> 17                    R_execClosure 00007f8c1af53a00
#> 18                applyClosure_core 00007f8c1af549b0
#> 19                          Rf_eval 00007f8c1af51920
#> 20                         do_begin 00007f8c1af556f0
#> 21                          Rf_eval 00007f8c1af51920
#> 22                    R_execClosure 00007f8c1af53a00
#> 23                applyClosure_core 00007f8c1af549b0
#> 24                          Rf_eval 00007f8c1af51920
#> 25                          do_eval 00007f8c1af57f30
#> 26                      bcEval_loop 00007f8c1af3dfb0
#> 27                           bcEval 00007f8c1af514d0
#> 28                          Rf_eval 00007f8c1af51920
#> 29              forcePromise.part.0 00007f8c1af52340
#> 30                          Rf_eval 00007f8c1af51920
#> 31                   do_withVisible 00007f8c1af58b90
#> 32                      do_internal 00007f8c1af9dfc0
#> 33                      bcEval_loop 00007f8c1af3dfb0
#> 34                           bcEval 00007f8c1af514d0
#> 35                          Rf_eval 00007f8c1af51920
#> 36              forcePromise.part.0 00007f8c1af52340
#> 37                          Rf_eval 00007f8c1af51920
#> 38              forcePromise.part.0 00007f8c1af52340
#> 39                           getvar 00007f8c1af52540
#> 40                      bcEval_loop 00007f8c1af3dfb0
#> 41                           bcEval 00007f8c1af514d0
#> 42                          Rf_eval 00007f8c1af51920
#> 43                    R_execClosure 00007f8c1af53a00
#> 44                applyClosure_core 00007f8c1af549b0
#> 45                          Rf_eval 00007f8c1af51920
#> 46                          do_eval 00007f8c1af57f30
#> 47                      bcEval_loop 00007f8c1af3dfb0
#> 48                           bcEval 00007f8c1af514d0
#> 49                          Rf_eval 00007f8c1af51920
#> 50                    R_execClosure 00007f8c1af53a00
#> 51                applyClosure_core 00007f8c1af549b0
#> 52                   R_forceAndCall 00007f8c1af57240
#> 53                     R_init_purrr 00007f8c15691b70
#> 54                     R_init_purrr 00007f8c15691d80
#> 55                      R_doDotCall 00007f8c1af01c20
#> 56                       do_dotcall 00007f8c1af03840
#> 57                          Rf_eval 00007f8c1af51920
#> 58 <unw_get_proc_name() error: -10> 00007f8c1568fbc0
#> 59                R_ExecWithCleanup 00007f8c1aeea500
#> 60 <unw_get_proc_name() error: -10> 00007f8c1568fe60
#> 61 <unw_get_proc_name() error: -10> 00007f8c1568ff10
#> 62                      R_doDotCall 00007f8c1af01c20
#> 63                      bcEval_loop 00007f8c1af3dfb0
#> 64                           bcEval 00007f8c1af514d0
#> 65                          Rf_eval 00007f8c1af51920
#> 66                    R_execClosure 00007f8c1af53a00
#> 67                applyClosure_core 00007f8c1af549b0
#> 68                          Rf_eval 00007f8c1af51920
#> 69                 Rf_ReplIteration 00007f8c1af8bbf0
#> 70                    R_ReplConsole 00007f8c1af8c110
#> 71                    run_Rmainloop 00007f8c1af8c200
#> 72                             main 000055f51138f080
#> 73                __libc_init_first 00007f8c1aa2a150
#> 74                __libc_start_main 00007f8c1aa2a200
#> 75                           _start 000055f51138f0b0
#>                                               pathname is_libr
#> 1                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 2                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 3                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 4                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 5                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 6                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 7                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 8                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 9                       /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 10                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 11                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 12 /home/runner/work/_temp/Library/winch/libs/winch.so   FALSE
#> 13                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 14                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 15                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 16                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 17                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 18                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 19                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 20                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 21                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 22                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 23                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 24                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 25                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 26                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 27                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 28                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 29                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 30                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 31                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 32                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 33                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 34                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 35                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 36                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 37                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 38                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 39                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 40                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 41                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 42                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 43                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 44                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 45                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 46                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 47                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 48                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 49                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 50                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 51                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 52                      /opt/R/4.5.1/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.1/lib/R/lib/libR.so    TRUE
#> 56                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 57                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 58 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 59                      /opt/R/4.5.1/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.1/lib/R/lib/libR.so    TRUE
#> 63                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 64                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 65                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 66                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 67                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 68                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 69                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 70                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 71                      /opt/R/4.5.1/lib/R/lib/libR.so    TRUE
#> 72                       /opt/R/4.5.1/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.1/lib/R/bin/exec/R    TRUE