Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DTrace: printf debugging for seventh-level wizards
Search
Shawn Moore
January 14, 2012
Programming
2
1.3k
DTrace: printf debugging for seventh-level wizards
Shawn Moore
January 14, 2012
Tweet
Share
More Decks by Shawn Moore
See All by Shawn Moore
Right the First Time
sartak
0
500
Lifting Moose
sartak
0
610
Kindergarten Code
sartak
0
120
How to be Fluent in Japanese
sartak
0
170
DTrace War Stories
sartak
1
160
Moose Role Usage Patterns
sartak
5
5.9k
git-status-tackle
sartak
5
370
Extending Moose for Applications
sartak
1
380
API Design
sartak
4
980
Other Decks in Programming
See All in Programming
CSC509 Lecture 09
javiergs
PRO
0
280
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
450
Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理
matuyuhi
0
270
Researchlyの開発で参考にしたデザイン
adsholoko
0
110
予防に勝る防御なし(2025年版) - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHP Conference Fukuoka 2025
twada
PRO
11
2k
Making Angular Apps Smarter with Generative AI: Local and Offline-capable
christianliebel
PRO
0
100
Pythonに漸進的に型をつける
nealle
1
150
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
230
EMこそClaude Codeでコード調査しよう
shibayu36
0
580
AI Agent 時代的開發者生存指南
eddie
4
2.3k
お前も Gemini CLI extensions を作らないか?
satohjohn
0
100
CSC509 Lecture 07
javiergs
PRO
0
250
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Bash Introduction
62gerente
615
210k
Why Our Code Smells
bkeepers
PRO
340
57k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Facilitating Awesome Meetings
lara
57
6.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Gamification - CAS2011
davidbonilla
81
5.5k
A Tale of Four Properties
chriscoyier
161
23k
A designer walks into a library…
pauljervisheath
209
24k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Transcript
@sartak DTRACE printf debugging for seventh-level wizards 121݄14༵
ME ME ME ME ME ME ME Shawn M Moore
@sartak I’m Bawstin’ Moose-lover Infinity Interactive 121݄14༵
What’s my computer doing right now? Q: A: Find out
with DTrace 121݄14༵
iotop $ iotop dtrace: failed to initialize dtrace: DTrace requires
additional privileges You may already have DTrace and not even know it. 121݄14༵
Solaris & OS X (complete) Linux (partial) Profiler (Different and
deeper than NYTProf) Debugger Kernel module “You don’t port DTrace to an OS, you port an OS to DTrace” DTRACE 121݄14༵
SAFE! ɾNo unwanted side effects ɾVery low overhead ɾDo it
in production! 121݄14༵
σϞ pidpersec iotop execsnoop opensnoop dtruss plockstat iosnoop Global (high
level) The metal (low level) 121݄14༵
σϞ pidpersec iotop execsnoop opensnoop dtruss plockstat iosnoop Global (high
level) The metal (low level) 121݄14༵
PROGRAMMABILITY dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ {
printf("%s %s",execname,copyinstr(arg0)); }' Show processes that open a file whose name includes “corpus” 121݄14༵
PROGRAMMABILITY dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ {
printf("%s %s",execname,copyinstr(arg0)); }' Show processes that open a file whose name includes “corpus” Event(Probe Description) 121݄14༵
PROGRAMMABILITY dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ {
printf("%s %s",execname,copyinstr(arg0)); }' Show processes that open a file whose name includes “corpus” Predicate 121݄14༵
PROGRAMMABILITY dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ {
printf("%s %s",execname,copyinstr(arg0)); }' Show processes that open a file whose name includes “corpus” Action 121݄14༵
PROGRAMMABILITY dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ {
printf("%s %s",execname,copyinstr(arg0)); }' Show processes that open a file whose name includes “corpus” 121݄14༵
DTrace instrumentation points ɾKernel function calls/returns (syscalls too) ɾPerl function
calls/returns ɾSQL execution ɾthreads ɾsignals ɾmany more PROBES 121݄14༵
THE COOL DEMO HEY, FORGETFUL! DEMO THE GPG THING 121݄14༵
PROFILER Devel::NYTProf kicks ass 121݄14༵
PROFILER But there’s more than one way to do it
121݄14༵
PROFILER DEMO: syscalls intuit_method 121݄14༵
XCode’s profiler uses DTrace 121݄14༵
121݄14༵
TRANSLATION “I am comfortable being ignorant and helpless” 121݄14༵
DEBUGGER Request Tracker (e.g. rt.cpan.org) was failing tests on mod_perl.
On only my computer. Probably because of all the Japanese. 121݄14༵
DEBUGGER Failed test 'gpg: error reading key: ެ։伴͕ݟ͔ͭΓ·ͤΜ' doesn't match
'(?-xism:public key not found)' 121݄14༵
DEBUGGER ެ։伴͕ݟ͔ͭΓ·ͤΜ isn’t part of RT’s Japanese i18n 121݄14༵
DEBUGGER ެ։伴͕ݟ͔ͭΓ·ͤΜ possibly from GPG’s i18n? 121݄14༵
DEBUGGER gpg-2.0.18 $ ack -a ެ։伴͕ݟ͔ͭΓ·ͤΜ gpg-2.0.18 $ 121݄14༵
DEBUGGER gpg-2.0.18 $ echo "ެ։伴͕ݟ͔ͭΓ·ͤΜ" | iconv -f UTF-8 -t
EUCJP | xargs ack -ao | iconv -f EUCJP -t UTF-8 Binary file po/ja.gmo matches po/ja.po:2965:ެ։伴͕ݟ͔ͭΓ·ͤΜ po/ja.po:6525:ެ։伴͕ݟ͔ͭΓ·ͤΜ po/ja.po:8311:ެ։伴͕ݟ͔ͭΓ·ͤΜ gpg-2.0.18 $ 121݄14༵
DEBUGGER probably a mis-set $LANG, $LC_ALL? 121݄14༵
DEBUGGER Ͱ LC_ALL=en gpg LC_ALL=ja gpg LC_ALL= gpg opensnoop 121݄14༵
DEBUGGER Without DTrace, woulda had to add print statements to
GPG itself 121݄14༵
DEBUGGER then compiled it 121݄14༵
DEBUGGER then installed it 121݄14༵
DEBUGGER then repeated a couple of times because I’m a
“throw everything til something sticks” kinda guy 121݄14༵
DEBUGGER then cleaned up after all that hot mess 121݄14༵
DEBUGGER DTrace is great for debugging interactions between programs 121݄14༵
DEBUGGER DTrace is great for debugging interactions between YOUR BEAUTIFUL
CODE and THE IDIOTS 121݄14༵
Perl ɾ5.10.0+: sub-entry, sub-return ɾ5.15.1+: phase-change (${^GLOBAL_PHASE}) ɹ ɾFuture?: string
eval, etc. perldoc perldtrace 121݄14༵
Perl ɾ5.10.0Ҏ߱: sub-entry, sub-return ɾ5.15.1Ҏ߱: phase-change ɹ ɾকདྷʁ: string eval
My first Perl patch! Was simple! perldtrace 121݄14༵
QUESTIONS? ຊޠͰ̤̠Ͱ͢ʂ slides: http://twitter.com/sartak 121݄14༵