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 00007f104253e5c0
#> 2                            bcEval 00007f1042551ae0
#> 3                           Rf_eval 00007f1042551f30
#> 4                     R_execClosure 00007f1042554010
#> 5                 applyClosure_core 00007f1042554fc0
#> 6                           Rf_eval 00007f1042551f30
#> 7                           do_eval 00007f1042558540
#> 8                       bcEval_loop 00007f104253e5c0
#> 9                            bcEval 00007f1042551ae0
#> 10                          Rf_eval 00007f1042551f30
#> 11              forcePromise.part.0 00007f1042552950
#> 12                          Rf_eval 00007f1042551f30
#> 13                   do_withVisible 00007f10425591a0
#> 14                      do_internal 00007f104259e5d0
#> 15                      bcEval_loop 00007f104253e5c0
#> 16                           bcEval 00007f1042551ae0
#> 17                          Rf_eval 00007f1042551f30
#> 18              forcePromise.part.0 00007f1042552950
#> 19                          Rf_eval 00007f1042551f30
#> 20              forcePromise.part.0 00007f1042552950
#> 21                           getvar 00007f1042552b50
#> 22                      bcEval_loop 00007f104253e5c0
#> 23                           bcEval 00007f1042551ae0
#> 24                          Rf_eval 00007f1042551f30
#> 25                    R_execClosure 00007f1042554010
#> 26                applyClosure_core 00007f1042554fc0
#> 27                          Rf_eval 00007f1042551f30
#> 28                          do_eval 00007f1042558540
#> 29                      bcEval_loop 00007f104253e5c0
#> 30                           bcEval 00007f1042551ae0
#> 31                          Rf_eval 00007f1042551f30
#> 32                    R_execClosure 00007f1042554010
#> 33                applyClosure_core 00007f1042554fc0
#> 34                   R_forceAndCall 00007f1042557850
#> 35                     R_init_purrr 00007f103cc91a40
#> 36                     R_init_purrr 00007f103cc91c50
#> 37                      R_doDotCall 00007f1042502230
#> 38                       do_dotcall 00007f1042503e50
#> 39                          Rf_eval 00007f1042551f30
#> 40 <unw_get_proc_name() error: -10> 00007f103cc8fbc0
#> 41                R_ExecWithCleanup 00007f10424eab10
#> 42 <unw_get_proc_name() error: -10> 00007f103cc8fe60
#> 43 <unw_get_proc_name() error: -10> 00007f103cc8ff10
#> 44                      R_doDotCall 00007f1042502230
#> 45                      bcEval_loop 00007f104253e5c0
#> 46                           bcEval 00007f1042551ae0
#> 47                          Rf_eval 00007f1042551f30
#> 48                    R_execClosure 00007f1042554010
#> 49                applyClosure_core 00007f1042554fc0
#> 50                          Rf_eval 00007f1042551f30
#> 51                 Rf_ReplIteration 00007f104258c200
#> 52                    R_ReplConsole 00007f104258c720
#> 53                    run_Rmainloop 00007f104258c810
#> 54                             main 00005599de2e3080
#> 55                __libc_init_first 00007f104202a150
#> 56                __libc_start_main 00007f104202a200
#> 57                           _start 00005599de2e30b0
#>                                               pathname is_libr
#> 1                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 2                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 3                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 4                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 5                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 6                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 7                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 8                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 9                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 10                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 11                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 12                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 13                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 14                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 15                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 16                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 17                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 18                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 19                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 20                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 21                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 22                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 23                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 24                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 25                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 26                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 27                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 28                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 29                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 30                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 31                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 32                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 33                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 34                      /opt/R/4.5.2/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.2/lib/R/lib/libR.so    TRUE
#> 38                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 39                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 40 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 41                      /opt/R/4.5.2/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.2/lib/R/lib/libR.so    TRUE
#> 45                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 46                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 47                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 48                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 49                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 50                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 51                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 52                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 53                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 54                       /opt/R/4.5.2/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.2/lib/R/bin/exec/R    TRUE

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

bar <- function() {
  winch_trace_back()
}

foo()
#>                                func               ip
#> 1                       bcEval_loop 00007f104253e5c0
#> 2                            bcEval 00007f1042551ae0
#> 3                           Rf_eval 00007f1042551f30
#> 4                     R_execClosure 00007f1042554010
#> 5                 applyClosure_core 00007f1042554fc0
#> 6                           Rf_eval 00007f1042551f30
#> 7                          do_begin 00007f1042555d00
#> 8                           Rf_eval 00007f1042551f30
#> 9                     R_execClosure 00007f1042554010
#> 10                applyClosure_core 00007f1042554fc0
#> 11                          Rf_eval 00007f1042551f30
#> 12                       winch_call 00007f10210c4970
#> 13                      R_doDotCall 00007f1042502230
#> 14                      bcEval_loop 00007f104253e5c0
#> 15                           bcEval 00007f1042551ae0
#> 16                          Rf_eval 00007f1042551f30
#> 17                    R_execClosure 00007f1042554010
#> 18                applyClosure_core 00007f1042554fc0
#> 19                          Rf_eval 00007f1042551f30
#> 20                         do_begin 00007f1042555d00
#> 21                          Rf_eval 00007f1042551f30
#> 22                    R_execClosure 00007f1042554010
#> 23                applyClosure_core 00007f1042554fc0
#> 24                          Rf_eval 00007f1042551f30
#> 25                          do_eval 00007f1042558540
#> 26                      bcEval_loop 00007f104253e5c0
#> 27                           bcEval 00007f1042551ae0
#> 28                          Rf_eval 00007f1042551f30
#> 29              forcePromise.part.0 00007f1042552950
#> 30                          Rf_eval 00007f1042551f30
#> 31                   do_withVisible 00007f10425591a0
#> 32                      do_internal 00007f104259e5d0
#> 33                      bcEval_loop 00007f104253e5c0
#> 34                           bcEval 00007f1042551ae0
#> 35                          Rf_eval 00007f1042551f30
#> 36              forcePromise.part.0 00007f1042552950
#> 37                          Rf_eval 00007f1042551f30
#> 38              forcePromise.part.0 00007f1042552950
#> 39                           getvar 00007f1042552b50
#> 40                      bcEval_loop 00007f104253e5c0
#> 41                           bcEval 00007f1042551ae0
#> 42                          Rf_eval 00007f1042551f30
#> 43                    R_execClosure 00007f1042554010
#> 44                applyClosure_core 00007f1042554fc0
#> 45                          Rf_eval 00007f1042551f30
#> 46                          do_eval 00007f1042558540
#> 47                      bcEval_loop 00007f104253e5c0
#> 48                           bcEval 00007f1042551ae0
#> 49                          Rf_eval 00007f1042551f30
#> 50                    R_execClosure 00007f1042554010
#> 51                applyClosure_core 00007f1042554fc0
#> 52                   R_forceAndCall 00007f1042557850
#> 53                     R_init_purrr 00007f103cc91a40
#> 54                     R_init_purrr 00007f103cc91c50
#> 55                      R_doDotCall 00007f1042502230
#> 56                       do_dotcall 00007f1042503e50
#> 57                          Rf_eval 00007f1042551f30
#> 58 <unw_get_proc_name() error: -10> 00007f103cc8fbc0
#> 59                R_ExecWithCleanup 00007f10424eab10
#> 60 <unw_get_proc_name() error: -10> 00007f103cc8fe60
#> 61 <unw_get_proc_name() error: -10> 00007f103cc8ff10
#> 62                      R_doDotCall 00007f1042502230
#> 63                      bcEval_loop 00007f104253e5c0
#> 64                           bcEval 00007f1042551ae0
#> 65                          Rf_eval 00007f1042551f30
#> 66                    R_execClosure 00007f1042554010
#> 67                applyClosure_core 00007f1042554fc0
#> 68                          Rf_eval 00007f1042551f30
#> 69                 Rf_ReplIteration 00007f104258c200
#> 70                    R_ReplConsole 00007f104258c720
#> 71                    run_Rmainloop 00007f104258c810
#> 72                             main 00005599de2e3080
#> 73                __libc_init_first 00007f104202a150
#> 74                __libc_start_main 00007f104202a200
#> 75                           _start 00005599de2e30b0
#>                                               pathname is_libr
#> 1                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 2                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 3                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 4                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 5                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 6                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 7                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 8                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 9                       /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 10                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 11                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 12 /home/runner/work/_temp/Library/winch/libs/winch.so   FALSE
#> 13                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 14                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 15                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 16                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 17                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 18                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 19                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 20                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 21                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 22                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 23                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 24                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 25                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 26                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 27                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 28                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 29                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 30                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 31                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 32                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 33                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 34                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 35                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 36                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 37                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 38                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 39                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 40                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 41                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 42                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 43                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 44                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 45                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 46                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 47                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 48                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 49                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 50                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 51                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 52                      /opt/R/4.5.2/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.2/lib/R/lib/libR.so    TRUE
#> 56                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 57                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 58 /home/runner/work/_temp/Library/purrr/libs/purrr.so   FALSE
#> 59                      /opt/R/4.5.2/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.2/lib/R/lib/libR.so    TRUE
#> 63                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 64                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 65                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 66                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 67                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 68                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 69                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 70                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 71                      /opt/R/4.5.2/lib/R/lib/libR.so    TRUE
#> 72                       /opt/R/4.5.2/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.2/lib/R/bin/exec/R    TRUE