Browse thread
Stack backtrace for exception in a running program
- Robert Schneck-McConnell
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Robert Schneck-McConnell <schneck@g...> |
| Subject: | Stack backtrace for exception in a running program |
I saw that back in January someone asked about printing a backtrace
for an exception without killing the program. I recently needed to do
this and found that the suggestion from that earlier thread to write
a C extension (which didn't seem to work for the original poster)
worked fine for me.
In case anyone else needs this information, here's how.
(1) You need this short C file, call it "ml_backtrace.c"
#include <caml/mlvalues.h>
#include <caml/alloc.h>
#include <caml/memory.h>
#include <caml/callback.h>
#include <caml/fail.h>
CAMLextern void caml_print_exception_backtrace(void);
CAMLprim value ml_print_exception_backtrace (value unit)
{
caml_print_exception_backtrace();
return Val_unit;
}
(2) In your OCaml program, include the line
external print_exception_backtrace : unit -> unit =
"ml_print_exception_backtrace"
(3) Call "print_exception_backtrace ()" anytime you need it after
catching an exception.
(4) Compile the OCaml program in bytecode with -g, link with
-g -custom and against the ml_backtrace.o file. In one line,
ocamlc -o program -g -custom program.ml ml_backtrace.c
(5) Make sure the environment variable OCAMLRUNPARAM=b is set when
you run the program.
Best,
Robert