I observe the following unexpected behavior:
try
… some code ...
with e ->
(* Printf.eprintf "%s\n" (Printexc.to_string e); *)
Printexc.print_backtrace Legacy.stderr
------
Compiling as ocamlopt -g
a.ml gives:
$ ./a.out
Raised at file "
fool.ml", line 162, characters 13-22
Called from file "
bar.ml", line 13, characters 5-56
Called from file "
bar.ml", line 43, characters 4-63
Now this doesn't say which exception was raised, so I uncomment the commented line. I'm expecting the identical output, but with the exception printed first. However, I get:
$ ./a.out
Not_found
Raised at file "
hashtbl.ml", line 93, characters 19-28
So it appears that printing an exception changes the backtrace. Is that possible?
Unfortunately, I cannot reproduce this behavior in a minimal example. The following script behaves as expected:
let f () = raise (Failure "")
let g () = f ()
let _ =
try g()
with e ->
(* Printf.eprintf "%s\n" (Printexc.to_string e); *)
Printexc.print_backtrace stderr