diff --git a/src/main.ml b/src/main.ml
index 32b7d9eec2b163b85976697d4fdfa9ee0b5dde3b..6aa9a0b1de4dcb1fe21ad77004ee07602d5b30ad 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -47,6 +47,9 @@ let setup_logs =
   in
   Term.(const setup_log $ Logs_cli.level ())
 
+let log_level_is_debug () =
+  match Logs.level () with Some Debug -> true | _ -> false
+
 (* -- Commands. *)
 
 let config detect () =
@@ -54,7 +57,7 @@ let config detect () =
   then (
     Logs.debug (fun m -> m "Automatic detection.");
     let config =
-      let debug = match Logs.level () with Some Debug -> true | _ -> false in
+      let debug = log_level_is_debug () in
       Autodetect.autodetection ~debug ()
     in
     let open Why3 in
@@ -66,7 +69,7 @@ let config detect () =
         provers))
 
 let verify format loadpath memlimit timeout prover files =
-  let debug = match Logs.level () with Some Debug -> true | _ -> false in
+  let debug = log_level_is_debug () in
   List.iter
     ~f:(Verification.verify ~debug format loadpath ?memlimit ?timeout ~prover)
     files
@@ -173,6 +176,11 @@ let default_cmd =
     Term.info caisar ~version ~doc ~sdocs ~exits:Term.default_exits ~man )
 
 let () =
-  match Term.(eval_choice default_cmd [ config_cmd; verify_cmd ]) with
-  | `Error _ -> Caml.exit 1
-  | _ -> Caml.exit (if Logs.err_count () > 0 then 1 else 0)
+  try
+    match
+      Term.(eval_choice ~catch:false default_cmd [ config_cmd; verify_cmd ])
+    with
+    | `Error _ -> Caml.exit 1
+    | _ -> Caml.exit (if Logs.err_count () > 0 then 1 else 0)
+  with exn when not (log_level_is_debug ()) ->
+    Fmt.epr "%a@." Why3.Exn_printer.exn_printer exn