Try and improve the print-backtrace-and-exception/knots output, be selective about the stack frames which are shown to try and produce some useful output which reflects user code and hide the &knots-exceptions. This commit also introduces a bunch of tests scripts that produce output from print-backtrace-and-exception/knots, to help test this code in different situations.
This commit is contained in:
parent
92c2fe46e7
commit
b3fa4d069b
21 changed files with 957 additions and 118 deletions
40
tests/backtraces/nested-parallelism.scm
Normal file
40
tests/backtraces/nested-parallelism.scm
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
(use-modules (knots) (fibers) (knots parallelism))
|
||||
|
||||
;; Deep call chain within the innermost fiber. Each function calls the next
|
||||
;; via `begin', placing the call in non-tail position so Guile's TCO does not
|
||||
;; collapse the frames; all four frames survive and appear in the backtrace.
|
||||
(define (deeply-nested x)
|
||||
(error "deeply nested error" x)) ; LAST BACKTRACE ENTRY HERE
|
||||
|
||||
(define (three-deep x)
|
||||
(fibers-map deeply-nested (list x)))
|
||||
|
||||
(define (two-deep x)
|
||||
(fibers-map three-deep (list x)))
|
||||
|
||||
(define (one-deep x)
|
||||
(fibers-map two-deep (list x)))
|
||||
|
||||
;; process-batch runs inside one fiber and dispatches the deep call chain into
|
||||
;; a nested fiber via a second fibers-map, creating two fiber boundaries.
|
||||
(define (process-batch items)
|
||||
(begin
|
||||
(fibers-map one-deep (list items))
|
||||
'unreachable))
|
||||
|
||||
(define (run-work)
|
||||
(begin
|
||||
(fibers-map process-batch '(1))
|
||||
'unreachable))
|
||||
|
||||
(define result
|
||||
(run-fibers
|
||||
(lambda ()
|
||||
;; FIRST BACKTRACE ENTRY: 1762:12 (with-exception-handler
|
||||
(with-exception-handler
|
||||
(lambda (e)
|
||||
(print-backtrace-and-exception/knots e)
|
||||
(primitive-exit 1))
|
||||
run-work))
|
||||
#:hz 0 #:parallelism 1))
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue