Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bcc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
bcc
Commits
e5382283
Commit
e5382283
authored
Jan 26, 2018
by
Mirek Klimos
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add option to print virtual address to trace.py
parent
08be4432
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
8 deletions
+31
-8
man/man8/trace.8
man/man8/trace.8
+3
-1
tools/trace.py
tools/trace.py
+12
-5
tools/trace_example.txt
tools/trace_example.txt
+16
-2
No files found.
man/man8/trace.8
View file @
e5382283
...
...
@@ -3,7 +3,7 @@
trace \- Trace a function and print its arguments or return value, optionally evaluating a filter. Uses Linux eBPF/bcc.
.SH SYNOPSIS
.B trace [-h] [-b BUFFER_PAGES] [-p PID] [-L TID] [-v] [-Z STRING_SIZE] [-S]
[-M MAX_EVENTS] [-t] [-T] [-C] [-K] [-U] [-I header]
[-M MAX_EVENTS] [-t] [-T] [-C] [-K] [-U] [-
a] [-
I header]
probe [probe ...]
.SH DESCRIPTION
trace probes functions you specify and displays trace messages if a particular
...
...
@@ -53,6 +53,8 @@ Print the kernel stack for each event.
.TP
\-U
Print the user stack for each event.
\-a
Print virtual address in kernel and user stacks.
.TP
\-I header
Additional header files to include in the BPF program. This is needed if your
...
...
tools/trace.py
View file @
e5382283
...
...
@@ -4,7 +4,7 @@
# parameters, with an optional filter.
#
# usage: trace [-h] [-p PID] [-L TID] [-v] [-Z STRING_SIZE] [-S]
# [-M MAX_EVENTS] [-T] [-t] [-K] [-U] [-I header]
# [-M MAX_EVENTS] [-T] [-t] [-K] [-U] [-
a] [-
I header]
# probe [probe ...]
#
# Licensed under the Apache License, Version 2.0 (the "License")
...
...
@@ -31,6 +31,7 @@ class Probe(object):
use_localtime
=
True
time_field
=
False
print_cpu
=
False
print_address
=
False
tgid
=
-
1
pid
=
-
1
page_cnt
=
None
...
...
@@ -42,6 +43,7 @@ class Probe(object):
cls
.
use_localtime
=
not
args
.
timestamp
cls
.
time_field
=
cls
.
print_time
and
(
not
cls
.
use_localtime
)
cls
.
print_cpu
=
args
.
print_cpu
cls
.
print_address
=
args
.
address
cls
.
first_ts
=
BPF
.
monotonic_time
()
cls
.
tgid
=
args
.
tgid
or
-
1
cls
.
pid
=
args
.
pid
or
-
1
...
...
@@ -479,7 +481,10 @@ BPF_PERF_OUTPUT(%s);
stack
=
list
(
bpf
.
get_table
(
self
.
stacks_name
).
walk
(
stack_id
))
for
addr
in
stack
:
print
(
" %s"
%
(
bpf
.
sym
(
addr
,
tgid
,
print
(
" "
,
end
=
""
)
if
Probe
.
print_address
:
print
(
"%16x "
%
addr
,
end
=
""
)
print
(
"%s"
%
(
bpf
.
sym
(
addr
,
tgid
,
show_module
=
True
,
show_offset
=
True
)))
def
_format_message
(
self
,
bpf
,
tgid
,
values
):
...
...
@@ -645,6 +650,8 @@ trace -I 'linux/fs_struct.h' 'mntns_install "users = %d", $task->fs->users'
action
=
"store_true"
,
help
=
"output kernel stack trace"
)
parser
.
add_argument
(
"-U"
,
"--user-stack"
,
action
=
"store_true"
,
help
=
"output user stack trace"
)
parser
.
add_argument
(
"-a"
,
"--address"
,
action
=
"store_true"
,
help
=
"print virtual address in stacks"
)
parser
.
add_argument
(
metavar
=
"probe"
,
dest
=
"probes"
,
nargs
=
"+"
,
help
=
"probe specifier (see examples)"
)
parser
.
add_argument
(
"-I"
,
"--include"
,
action
=
"append"
,
...
...
tools/trace_example.txt
View file @
e5382283
...
...
@@ -60,12 +60,25 @@ PID COMM FUNC -
2740 bash readline man ls
^C
The special retval keyword
s
stands for the function's return value, and can
The special retval keyword stands for the function's return value, and can
be used only in a retprobe, specified by the 'r' prefix. The next component
of the probe is the library that contains the desired function. It's OK to
specify executables too, as long as they can be found in the PATH. Or, you
can specify the full path to the executable (e.g. "/usr/bin/bash").
Sometimes it can be useful to see where in code the events happen. There are
flags to print the kernel stack (-K), the user stack (-U) and optionally
include the virtual address in the stacks as well (-a):
# trace.py -U -a 'r::sys_futex "%d", retval'
PID TID COMM FUNC -
793922 793951 poller sys_futex 0
7f6c72b6497a __lll_unlock_wake+0x1a [libpthread-2.23.so]
627fef folly::FunctionScheduler::run()+0x46f [router]
7f6c7345f171 execute_native_thread_routine+0x21 [libstdc++.so.6.0.21]
7f6c72b5b7a9 start_thread+0xd9 [libpthread-2.23.so]
7f6c7223fa7d clone+0x6d [libc-2.23.so]
Multiple probes can be combined on the same command line. For example, let's
trace failed read and write calls on the libc level, and include a time column:
...
...
@@ -225,7 +238,7 @@ size and is measured in pages. The value must be a power of two and defaults to
USAGE message:
usage: trace [-h] [-b BUFFER_PAGES] [-p PID] [-L TID] [-v] [-Z STRING_SIZE]
[-S] [-M MAX_EVENTS] [-t] [-T] [-K] [-U] [-I header]
[-S] [-M MAX_EVENTS] [-t] [-T] [-K] [-U] [-
a] [-
I header]
probe [probe ...]
Attach to functions and print trace messages.
...
...
@@ -251,6 +264,7 @@ optional arguments:
-C, --print_cpu print CPU id
-K, --kernel-stack output kernel stack trace
-U, --user-stack output user stack trace
-a, --address print virtual address in stacks
-I header, --include header
additional header files to include in the BPF program
as either full path, or relative to current working directory,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment