Search code examples
exceptiongtkocamllablgtk

Exceptions in Lablgtk callbacks


In Lablgtk, whenever there is an exception in a callback, the exception is automatically caught and an error message is printed in the console, such as:

(prog:12345) LablGTK-CRITICAL **: gtk_tree_model_foreach_func: 
    callback raised an exception

This gives no stack trace and no details about the exception, and because it is caught I cannot retrieve this information myself.

Can I enable more detailed logging information for this case? Or prevent the exception from being caught automatically?


Solution

  • I guess the best way to do so is to catch your exception manually and handle it yourself.

    let callback_print_exn f () =
     try f () with
     e -> my_exn_printer e
    

    Assuming val my_exn_printer : exn -> unit is your custom exception printer, you can simply print your callbacks exceptions by replacing ~callback:f by ~callback:(callback_print_exn f) in your code.

    Of course, you can also with that method send that exception to another thread, register a "callback id" that would be passed along with your exception...

    About the stack trace, I'm not sure you can retrieve it easily. As it's launched as a callback, you probably want to know the signal used and that can be stored in your callback handler.