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
480
Lifting Moose
sartak
0
580
Kindergarten Code
sartak
0
110
How to be Fluent in Japanese
sartak
0
160
DTrace War Stories
sartak
1
140
Moose Role Usage Patterns
sartak
5
5.9k
git-status-tackle
sartak
5
360
Extending Moose for Applications
sartak
1
370
API Design
sartak
4
970
Other Decks in Programming
See All in Programming
Rails Frontend Evolution: It Was a Setup All Along
skryukov
0
300
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
240
Startups on Rails in Past, Present and Future–Irina Nazarova, RailsConf 2025
irinanazarova
0
280
GPUを計算資源として使おう!
primenumber
1
280
Advanced Micro Frontends: Multi Version/ Framework Scenarios @WAD 2025, Berlin
manfredsteyer
PRO
0
410
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
18
8.6k
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
22k
20250708_JAWS_opscdk
takuyay0ne
2
130
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
12
7.3k
PipeCDのプラグイン化で目指すところ
warashi
1
310
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1.2k
テスターからテストエンジニアへ ~新米テストエンジニアが歩んだ9ヶ月振り返り~
non0113
2
230
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Code Review Best Practice
trishagee
69
19k
It's Worth the Effort
3n
185
28k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Faster Mobile Websites
deanohume
308
31k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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༵