Skip to content

Update 1wf_01_debugging.md #2897

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jan 28, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions data/tutorials/guides/1wf_01_debugging.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,27 @@ purpose formats are more suited to get the relevant information, than what can
be output automatically by the generic pretty-printer used by the trace
mechanism.

Compiler builtins help display useful debugging messages. They indicate a location in the program's source.
For example,
```ocaml
match Message.unpack response with
| Some y -> y
| None -> (Printf.eprintf "Invalid message at %s" __LOC__; raise Invalid_argument)
```
At compile time, the `__LOC__` builtin is substituted with its location in the program, described as a string `"File %S, line %d, characters %d-%d"`. File name, line number, start character and end character are also available through the `__POS__` builtin:
```ocaml
match Message.unpack response with
| Some y -> y
| None ->
let fname, lnum, _cstart, _cend = __POS__ in
Printf.printf "At line %d in file %s, an incorrect response was passed to Message.unpack"
lnum fname;
flush stdout; raise Invalid_argument
```

Compiler builtins are described in the
[standard library](https://ocaml.org/manual/5.2/api/Stdlib.html#1_Debugging) documentation.

## The OCaml Debugger

We now give a quick tutorial for the OCaml debugger (`ocamldebug`). Before
Expand Down
Loading