diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2017-01-17 09:49:04 +0100 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2017-01-17 09:49:04 +0100 |
commit | 43db836ea4fb19036a19f78e1f988f75a42b910c (patch) | |
tree | a653f92b566735e85386715165a783afbfb54839 /cparser | |
parent | 747ad5bd8c364684256fc7dd306cd475401fe1b0 (diff) | |
download | compcert-43db836ea4fb19036a19f78e1f988f75a42b910c.tar.gz compcert-43db836ea4fb19036a19f78e1f988f75a42b910c.zip |
Added backtrace handler.
If CompCert crashes because of an uncaught exception the exception
is caught toplevel and the backtrace is printed plus an additional
message to include the backtrace in a support request, if buildnr
and tag are available.
Bug 20681.
Diffstat (limited to 'cparser')
-rw-r--r-- | cparser/Cerrors.ml | 16 | ||||
-rw-r--r-- | cparser/Cerrors.mli | 3 |
2 files changed, 19 insertions, 0 deletions
diff --git a/cparser/Cerrors.ml b/cparser/Cerrors.ml index 612980f1..e7b21dbb 100644 --- a/cparser/Cerrors.ml +++ b/cparser/Cerrors.ml @@ -321,3 +321,19 @@ let warning_help = "Diagnostic options:\n\ let raise_on_errors () = if !num_errors > 0 then raise Abort + +let crash exn = + if Version.buildnr <> "" && Version.tag <> "" then begin + eprintf "%tThis is CompCert, Release:%s, Build:%s, Tag:%s%t\n" + bc Version.version Version.buildnr Version.tag rsc; + eprintf "Backtrace (please include this in your support request):\n%s" + (Printexc.get_backtrace ()); + eprintf "%tUncaught exception:%s.\n\ +\ Please report this problem to our support.\n\ +\ Error occurred in Build: %s, Tag: %s.\n%t" + rc (Printexc.to_string exn) Version.buildnr Version.tag rsc; + exit 2 + end else begin + Printexc.print_backtrace stderr; + exit 2 + end diff --git a/cparser/Cerrors.mli b/cparser/Cerrors.mli index 8501cfa0..b2350db6 100644 --- a/cparser/Cerrors.mli +++ b/cparser/Cerrors.mli @@ -72,3 +72,6 @@ val warning_options : (Commandline.pattern * Commandline.action) list (** List of all options for diagnostics *) val raise_on_errors : unit -> unit + +val crash: exn -> unit +(** Report the backtrace of the last exception and exit *) |