How to debug an OCaml program compiled to JavaScript.

Use the right compiler flags

OCaml flags

Make sure to use "-g" flags when compiling and linking ocaml bytecode. Js_of_ocaml will attempt to preserve variable names.

Js_of_ocaml flags

  • [–pretty] - format the generated JavaScript in a readable way and try to keep OCaml variable names.
  • [–no-inline] - prevent function inlining.
  • [–debug-info] - annotate the JavaScript file with locations from the OCaml sources.
  • [–source-map] - enable source-map support

Breakpoint

One can set breakpoints using developers tools (see https://developer.chrome.com/devtools/docs/javascript-debugging). Alternatively, one can set breakpoints programmatically by calling Js.debugger (). Note that browsers will only stop at breakpoints when developers tools are in use.

Source map

Source map is used to map the generated JavaScript code to original sources. After compiling with sourcemap enabled, using developers tools, one can set breakpoints, step through the code, and inspect variable directly in OCaml sources.

About Chrome DevTools

Useful setting Chrome DevTools: