Debugging Hooks
How to print "hello world" from your Hook!
How can I debug a Hook?
The Hook API provides a set of functions in the namespace trace which write output to the xrpld log file when xrpld is configured with the trace log-level. These functions, generally speaking, allow you to see the value of variables, buffers and otherwise trace the execution and state of a Hook at runtime.
๐ Hint
At time of writing there is no interactive Hook Debugger. You must use the trace functions.
Trace APIs
The following trace functions are available in the Hooks API
| Hook API | What it does |
| trace | Print a utf-8 message, followed by a user-specified buffer (this last optionally as hex.) |
| trace_num | Print a utf-8 message, followed by an integer. |
| trace_float | Print a utf-8 message, followed by an XFL Floating point number. |
| trace_slot | Print a utf-8 message, followed by the serialized contents of a slot. |
Example
The following code will print a single trace line then accept the Originating Transaction.
#include "../hookapi.h"
int64_t hook(int64_t reserved)
{
trace_num(SBUF("A number"), 10);
accept(0,0,0);
return 0;
}
An example of the log-line produced by xrpld when a payment is sent out of or into the Hook Account:
2021-Apr-13 13:59:11.083700726 UTC View:TRC
HookTrace[rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh-rE3SfnjwfzZFL3JK9cLVfJuy8Ar1XnCqPw]:
A number 10
The above appears in the log as all-one-line, but split here for visibility.
๐ Use testnet
The Hooks Public Testnet V2 is the perfect place to test your Hooks.
Log format
A breakdown of the log format appears in the table below
| Part | Description | # |
| 2021-Apr-13 13:59:11.083700726 UTC View:TRC | xrpld's prefix to the log line | 1 |
| HookTrace | This is a trace initiated by the Hook itself not some other information about the Hook. Other information is available on tags HookError, HookEmit and HookInfo. | 2 |
| [rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh | The first account in the square brackets is the Hook Account. | 3 |
| -rE3SfnjwfzZFL3JK9cLVfJuy8Ar1XnCqPw]: | The second account in the square brackets is the Originating Account. | 4 |
| A number | This is the message the Hook was told to deliver before the trace payload | 5 |
| 10 | This is the trace payload | 6 |
๐ง Tip
Xrpldproduces a lot of output. It is therefore generally advisible to grep logs for the account/s you are interested in.
For example use:tail -f log | grep HookTrace | grep <account>