First of all, download the latest version of `uftrace` from github. Since the version in WSL2 is 0.9.4 which haven't fix the **Segmentation Fault** bug.
## How to use?
1. Prepare the executable file
2. Record it
3. Report it
### Prepare the executable file
When compiling the project, must have the `-pg` flag in every `gcc` command if it contain the source file.
### Record
This command aims to execute the program and record it. You have to use record to further investigate.
```shell=
uftrace record a.out
```
You can trace specific functions using the `-F` option. In the following example, will trace the `main` function along with its associated child functions.
```shell=
uftrace record -F main a.out
```
After the record done, it may generate a folder `uftrace.data`
### Report
This command aims to calculate the statistical information of each function.
```shell=
uftrace report
```
Here is a example output
```
Total time Self time Calls Function
========== ========== ========== ====================
16.810 ms 2.055 us 1 main
12.161 ms 0.267 us 1 parse
12.085 ms 17.183 us 1 parse_internal
12.046 ms 71.888 us 133 read_global_statement
11.792 ms 97.457 us 124 read_global_decl
10.174 ms 19.556 us 121 read_func_body
10.146 ms 128.598 us 166 read_code_block
9.099 ms 367.475 us 393 read_body_statement
5.913 ms 2.447 ms 3283 get_next_token
4.702 ms 139.796 us 427 read_expr
3.268 ms 823.877 us 17001 lex_accept
3.008 ms 521.614 us 619 read_expr_operand
2.597 ms 143.835 us 1563 lex_expect
2.583 ms 435.389 us 1 code_generate
1.964 ms 981.237 us 1 elf_generate
1.778 ms 91.470 us 100 read_body_assignment
1.772 ms 327.819 us 323 read_lvalue
1.706 ms 750.418 us 607 get_operator
1.465 ms 1.465 ms 26738 strcmp
1.197 ms 41.958 us 200 read_full_var_decl
1.185 ms 127.270 us 693 lex_ident
1.122 ms 438.821 us 8301 read_char
```