diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2020-06-05 23:21:06 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2020-06-05 23:21:06 +0200 |
commit | 2e5403f74a3ece7568ee77748ec56ee29f99cb7a (patch) | |
tree | c67f77f0c7ef45dc849194668352b0ba882ae160 /module/main.scm | |
parent | Add warnings-are-errors config. (diff) | |
download | calp-2e5403f74a3ece7568ee77748ec56ee29f99cb7a.tar.gz calp-2e5403f74a3ece7568ee77748ec56ee29f99cb7a.tar.xz |
Change top error handler.
Diffstat (limited to '')
-rw-r--r-- | module/main.scm | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/module/main.scm b/module/main.scm index 331268f8..31d6957c 100644 --- a/module/main.scm +++ b/module/main.scm @@ -169,29 +169,29 @@ (string->symbol stprof))))) -(use-modules (system vm frame)) +(define logport (make-parameter (open-file "/tmp/calp.xml" "a"))) (define (main args) + + (when (zero? (ftell (logport))) + (format (logport) "<?xml version=\"1.0\" encoding=\"UTF-8\"?>~%")) + + (format (logport) "<run><start>~a</start>~%" + ((@ (datetime util) datetime->string) + ((@ (datetime) current-datetime)))) (report-time! "Program start") ;; ((@ (util config) print-configuration-documentation)) - (with-throw-handler #t - (lambda () (dynamic-wind (lambda () 'noop) - (lambda () (catch 'return (lambda () (wrapped-main args)) values)) - (lambda () (run-hook shutdown-hook)) - )) - (lambda (err . args) - (define stack (make-stack #t)) - (with-output-to-port (current-error-port) - (lambda () - (format #t "bindings = ") - (let loop ((frame (stack-ref stack 0))) - (when frame - (format #t "~{~a~^ ~}" (map binding-name (frame-bindings frame))) - (let ((event (and=> (frame-lookup-binding frame 'event) - binding-ref))) - (when event - (format (current-error-port) "event = ~a~%" event))) - - (loop (frame-previous frame)))) - (format #t "~%") - ))))) + (let ((stack #f)) + (catch #t + (lambda () (dynamic-wind (lambda () 'noop) + (lambda () (catch 'return (lambda () (wrapped-main args)) values)) + (lambda () (run-hook shutdown-hook)) + )) + (lambda (err raiser fmt . args) + (format #t "Calp has crashed with [~a], +~?~%See ~a for full backtrace~%" + err fmt args (port-filename (logport))) + (format (logport) "<trace>~%<![CDATA[~%") + (display-backtrace stack (logport)) + (format (logport) "]]></trace></run>~%")) + (lambda _ (set! stack (make-stack #t)))))) |