diff --git a/src/base/backtrace.nim b/src/base/backtrace.nim new file mode 100644 index 0000000..0a75dbe --- /dev/null +++ b/src/base/backtrace.nim @@ -0,0 +1,32 @@ +include system/ansi_c + +{. pragma: execinfo, header:"execinfo.h" .} + +proc backtrace(buffer: ptr pointer, size: cint): cint {.importc,execinfo.} +proc backtrace_symbols(buffer: ptr pointer, size: cint): ptr UncheckedArray[cstring] + {.importc,execinfo.} + +proc print_trace = + #void *array[10]; + const nmax = 10 + var arr: array[nmax, pointer] + #char **strings; + + let size = backtrace(addr arr[0], nmax) + let strings = backtrace_symbols(addr arr[0], size); + if not isNil strings: + echo "Stack trace of size: ", size + for i in 0..