Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
strace(1) all the things!
Dan Miller
November 13, 2014
Programming
3
620
strace(1) all the things!
Presented at the Marist College Computer Society meeting, 11/12/14
Dan Miller
November 13, 2014
Tweet
Share
More Decks by Dan Miller
See All by Dan Miller
Oh Snap!
jazzdan
0
240
HHVM at Etsy
jazzdan
22
6.6k
"API First" Development
jazzdan
7
900
Other Decks in Programming
See All in Programming
The future of trust stores in Python
sethmlarson
0
180
Modern Web Apps with Spring Boot, Angular & TypeScript
toedter
12
14k
dbtとBigQueryで始めるData Vault入門
kazk1018
0
190
全国の中高生がプログラミングを学んでいるCloud9環境の仕組み@JAWS-UG_SRE支部_#3
asache3
0
120
読みやすいコードを書こう
yutorin
0
430
Groovy Roadmap
paulk
7
13k
ソフトウェアテストなんて他人事! だと思っていた私が始めた小さな取り組み
izumii19
0
230
Micro Frontends with Module Federation: Beyond the Basics @codecrafts2022
manfredsteyer
PRO
0
120
A technique to implement DSL in Ruby
okuramasafumi
0
800
Let's make a contract: the art of designing a Java API
mariofusco
0
160
Oculus Interaction SDK 概説 / xrdnk-caunity-LT4
xrdnk
0
250
偏見と妄想で語るスクリプト言語としての Swift / Swift as a Scripting Language
lovee
2
270
Featured
See All Featured
Web development in the modern age
philhawksworth
197
9.3k
Git: the NoSQL Database
bkeepers
PRO
415
59k
Mobile First: as difficult as doing things right
swwweet
212
7.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
4
2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1k
Web Components: a chance to create the future
zenorocha
303
40k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
655
120k
Building a Scalable Design System with Sketch
lauravandoore
447
30k
Faster Mobile Websites
deanohume
294
28k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
15k
Documentation Writing (for coders)
carmenhchung
48
2.5k
Intergalactic Javascript Robots from Outer Space
tanoku
261
25k
Transcript
strace(1) all the things Dan Miller Software Engineer Etsy
etsy.com/careers
@jazzdan strace(1) all the things What is strace(1)? How to
see what a program does without the source A quick aside about man(1) pages How does ls(1) work?
What is strace?
@jazzdan strace(1) is a unix utility for observing system calls
How do we see what a program does without reading
the source?
@jazzdan $ls
@jazzdan $strace ls
None
@jazzdan strace ls • execve(2) • open(2) • close(2) •
getdents(2) • write(2)
A quick aside on Unix man pages
@jazzdan $man man
None
None
None
How does ls work?
execve("/bin/ls", ["ls"], [/* 23 vars */]) = 0
None
execve() executes the program pointed to by filename. filename must
be either a binary executable, or a script starting with a line of the form: ! #! interpreter [optional-arg]
int execve(const char *filename, char *const argv[], char *const envp[]);
open( “/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC ) = 3
None
Given a pathname for a file, open() returns a file
descriptor, a small, nonnegative integer for use in subsequent system calls (read(2), write(2), lseek(2), fcntl(2), etc.).
int open(const char *pathname, int flags)
open( “/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC ) = 3
@jazzdan Wait… what is libc?
@jazzdan $man libc
None
open( “.", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC ) = 3
getdents( 3, /* 4 entries */, 32768 ) = 712
None
int getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count);
getdents( 3, /* 23 entries */, 32768 )= 712
open( “.", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC ) = 3
close(3)
None
int close(int fd);
close(3)
write( 1, “hello_world\n", hello_world ) = 23
None
exit_group(0) = ?
None
This system call is equivalent to exit(2) except that it
terminates not only the calling thread, but all threads in the calling process's thread group.
void exit_group(int status);
@jazzdan When is strace(1) useful? • Anything involving files or
sockets • Path issues • See what is being sent over a network interface
@jazzdan When is strace(1) not useful? • In production (performance
is terrible) • When no syscalls are being executed
One Cool Trick for Performance Analysis (perf folks hate ‘em)
@jazzdan $strace -c ls
None
Questions?