Skip to content
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

Update 1wf_01_debugging.md #2897

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
27 changes: 27 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,33 @@ 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.

Print debugging is assisted by compiler builtins that allow a printed error
message to refer to the program location that the error was raised from.
Comment on lines +164 to +165
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Print debugging is assisted by compiler builtins that allow a printed error
message to refer to the program location that the error was raised from.
Compiler builtins improve debugging messages. The location of the error in the program can be displayed.

For example,
```ocaml
match Message.unpack response with
| Some y -> y
| None -> Printf.printf "Invalid message at %s" __LOC__; flush stdout;
raise Invalid_argument
Comment on lines +170 to +171
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| None -> Printf.printf "Invalid message at %s" __LOC__; flush stdout;
raise Invalid_argument
| None -> (Printf.eprintf "Invalid message at %s" __LOC__; raise Invalid_argument)

```
The compiler builtin `__LOC__` is substituted at compile time with the
location it occurs in the program, described as a string
"File %S, line %d, characters %d-%d".
One can also get the file name, line number, start character and
end character directly through the __POS__ builtin:
Comment on lines +173 to +177
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The compiler builtin `__LOC__` is substituted at compile time with the
location it occurs in the program, described as a string
"File %S, line %d, characters %d-%d".
One can also get the file name, line number, start character and
end character directly through the __POS__ builtin:
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"`. One can also get the file name, line number, start character and end character directly 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
```

Documentation for all debugging compiler builtins is in the
[standard library documentation](https://ocaml.org/manual/5.2/api/Stdlib.html#1_Debugging).
Comment on lines +188 to +189
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Documentation for all debugging compiler builtins is in the
[standard library documentation](https://ocaml.org/manual/5.2/api/Stdlib.html#1_Debugging).
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