Skip to content

Commit

Permalink
Merge pull request iovisor#949 from ShelbyFrances/trace_enhancements
Browse files Browse the repository at this point in the history
tools/trace accepts abspath arguments to -I (and some doc tweaks)
  • Loading branch information
drzaeus77 committed Feb 14, 2017
2 parents 9bd4699 + 69abacc commit afb19da
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 7 deletions.
10 changes: 8 additions & 2 deletions tools/argdist.py
Original file line number Diff line number Diff line change
Expand Up @@ -619,7 +619,8 @@ def __init__(self):
"(see examples below)")
parser.add_argument("-I", "--include", action="append",
metavar="header",
help="additional header files to include in the BPF program")
help="additional header files to include in the BPF program "
"as either full path, or relative to '/usr/include'")
self.args = parser.parse_args()
self.usdt_ctx = None

Expand All @@ -640,7 +641,12 @@ def _generate_program(self):
#include <uapi/linux/ptrace.h>
""" % self.args.string_size
for include in (self.args.include or []):
bpf_source += "#include <%s>\n" % include
if include.startswith((".", "/")):
include = os.path.abspath(include)
bpf_source += "#include \"%s\"\n" % include
else:
bpf_source += "#include <%s>\n" % include

bpf_source += BPF.generate_auto_includes(
map(lambda p: p.raw_spec, self.probes))
for probe in self.probes:
Expand Down
1 change: 1 addition & 0 deletions tools/argdist_example.txt
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,7 @@ optional arguments:
below)
-I header, --include header
additional header files to include in the BPF program
as either full path, or relative to '/usr/include'

Probe specifier syntax:
{p,r,t,u}:{[library],category}:function(signature)[:type[,type...]:expr[,expr...][:filter]][#label]
Expand Down
9 changes: 7 additions & 2 deletions tools/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,8 @@ def __init__(self):
help="probe specifier (see examples)")
parser.add_argument("-I", "--include", action="append",
metavar="header",
help="additional header files to include in the BPF program")
help="additional header files to include in the BPF program "
"as either full path, or relative to '/usr/include'")
self.args = parser.parse_args()
if self.args.tgid and self.args.pid:
parser.error("only one of -p and -t may be specified")
Expand All @@ -644,7 +645,11 @@ def _generate_program(self):
"""
for include in (self.args.include or []):
self.program += "#include <%s>\n" % include
if include.startswith((".", "/")):
include = os.path.abspath(include)
self.program += "#include \"%s\"\n" % include
else:
self.program += "#include <%s>\n" % include
self.program += BPF.generate_auto_includes(
map(lambda p: p.raw_probe, self.probes))
for probe in self.probes:
Expand Down
21 changes: 18 additions & 3 deletions tools/trace_example.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ Demonstrations of trace.


trace probes functions you specify and displays trace messages if a particular
condition is met. You can control the message format to display function
arguments and return values.
condition is met. You can control the message format to display function
arguments and return values.

For example, suppose you want to trace all commands being exec'd across the
system:
Expand Down Expand Up @@ -135,6 +135,16 @@ TIME PID COMM FUNC -
In the previous invocation, arg1 and arg2 are the class name and method name
for the Ruby method being invoked.

You can also trace exported functions from shared libraries, or an imported
function on the actual executable:

# sudo ./trace.py 'r:/usr/lib64/libtinfo.so:curses_version "Version=%s", retval'
# tput -V

PID TID COMM FUNC -
21720 21720 tput curses_version Version=ncurses 6.0.20160709
^C


Occasionally, it can be useful to filter specific strings. For example, you
might be interested in open() calls that open a specific file:
Expand Down Expand Up @@ -164,8 +174,12 @@ PID TID COMM FUNC -
777 785 automount SyS_nanosleep sleep for 500000000 ns
^C

Remember to use the -I argument include the appropriate header file. We didn't
need to do that here because `struct timespec` is used internally by the tool,
so it always includes this header file.


As a final example, let's trace open syscalls for a specific process. By
As a final example, let's trace open syscalls for a specific process. By
default, tracing is system-wide, but the -p switch overrides this:

# trace -p 2740 'do_sys_open "%s", arg2' -T
Expand Down Expand Up @@ -215,6 +229,7 @@ optional arguments:
-U, --user-stack output user stack trace
-I header, --include header
additional header files to include in the BPF program
as either full path, or relative to '/usr/include'

EXAMPLES:

Expand Down

0 comments on commit afb19da

Please sign in to comment.