diff --git a/src/main.ml b/src/main.ml
index abae9ca260acc9f72fcb64233144a76eac8b1b4e..e107385c5f418f7f6f90a9fa39d7e69b5414d72b 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -181,6 +181,7 @@ let _ =
       end;
 
       let compiler_res =
+        try
         pass_tokenize input >>= fun tokens ->
         pass_parse tokens >>= fun (ast, _) ->
         pass_elang ast >>= fun ep ->
@@ -200,6 +201,10 @@ let _ =
         pass_linear_dse linear lives >>= fun linear ->
         run "Linear after DSE" !linear_run_after_dse exec_linear_prog linear;
         pass_ltl_gen linear
+        with e ->
+          let emsg = Printexc.to_string e ^ "\n" ^ Printexc.get_backtrace () in
+          record_compile_result ~error:(Some emsg) "global";
+          Error emsg
       in
       begin
         match compiler_res with