# Call Graph Tracing

This section describes how to trace incoming and outgoing function calls.

## para-callgraph.stp

scriptcallgraph takes two command-line arguments:

- The function/s whose entry/exit call you'd like to trace (`$1`).

- A second optional trigger function (`$2`), which enables or disables tracing on a per-thread basis. Tracing in each thread will continue as long as the trigger function has not exited yet.

scriptcallgraph uses `thread_indent()`; as such, its output contains the timestamp, process name, and thread ID of `$1` (that is, the probe function you are tracing). For more information about `thread_indent()`, refer to its entry in systemtapscript-functions.

The following example contains an excerpt from the output for `stap para-callgraph.stp 'kernel.function("*@fs/*.c")' 'kernel.function("sys_read")'`:

## scriptcallgraph Sample Output

    [...]
       267 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5
       269 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5
         0 gnome-terminal(2921):->fput file=0xffff880111eebbc0
         2 gnome-terminal(2921):<-fput
         0 gnome-terminal(2921):->fget_light fd=0x3 fput_needed=0xffff88010544df54
         3 gnome-terminal(2921):<-fget_light return=0xffff8801116ce980
         0 gnome-terminal(2921):->vfs_read file=0xffff8801116ce980 buf=0xc86504 count=0x1000 pos=0xffff88010544df48
         4 gnome-terminal(2921): ->rw_verify_area read_write=0x0 file=0xffff8801116ce980 ppos=0xffff88010544df48 count=0x1000
         7 gnome-terminal(2921): <-rw_verify_area return=0x1000
        12 gnome-terminal(2921): ->do_sync_read filp=0xffff8801116ce980 buf=0xc86504 len=0x1000 ppos=0xffff88010544df48
        15 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5
        18 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5
         0 gnome-terminal(2921):->fput file=0xffff8801116ce980