Slide 1

Slide 1 text

@sartak DTRACE printf debugging for seventh-level wizards ࠷ڧͳຐ๏࢖͍ͷprintfͷΑ͏ͳσόοΨ 11೥10݄15೔౔༵೔

Slide 2

Slide 2 text

ࣗݾ঺հ ɹShawn M Mooreɹ ˏsartak Mooseʹ͍͔͞͞ߩݙ͠Α͏ͱ͢Δ ϘετϯʹॅΜͰ͍Δ ձࣾ: Infinity Interactive 11೥10݄15೔౔༵೔

Slide 3

Slide 3 text

ॻ͍ͨϞʔδϡϧ MooseX::Role::Parameterized Any::Moose cpandoc Carp::REPL Path::Dispatcher App::Nopaste (CPAN: SARTAK) ଞʹɺ࢖Θͳ͍ͷํ͕͍͍ͬͯଟ͘ͷϞʔδϡϧ 11೥10݄15೔౔༵೔

Slide 4

Slide 4 text

DTRACE 11೥10݄15೔౔༵೔

Slide 5

Slide 5 text

ࠓɺίϯϐϡʔλ͕ԿΛͯ͠Δͷʁ ࣭໰: ౴͑: DTraceͰ஌Δ͜ͱʹͳΕΔ ਖ਼௚ͳ౴͑: ͍͍ͨͯɺχίχίͰಲೣΛ؍ͯΔ 11೥10݄15೔౔༵೔

Slide 6

Slide 6 text

iotop ΋͔ͯ͠͠ɺ஌Βͣʹ͢ͰʹDTraceΛ࢖͍ͬͯͨʂ $ iotop dtrace: failed to initialize dtrace: DTrace requires additional privileges 11೥10݄15೔౔༵೔

Slide 7

Slide 7 text

OS X & Solaris(શ෦). Linux(͔΋͠Εͳ͍) ϓϩϑΝΠϥʔ (NYTProfΑΓਂ͘) σόοΨʔ ΧʔωϧϞʔδϡϧ (DTraceΛOSʹϙʔτ͠ͳͯ͘ɺ OSΛDTraceʹϙʔτ͢Δͬͯ) DTRACE 11೥10݄15೔౔༵೔

Slide 8

Slide 8 text

XCodeͷϓϩϑΝΠϥ͸DTraceΛ࢖͏ 11೥10݄15೔౔༵೔

Slide 9

Slide 9 text

 dtruss iotop opensnoop iosnoop pidpersec man -k dtrace 11೥10݄15೔౔༵೔

Slide 10

Slide 10 text

DTraceͱ઀৮఺ ɾΧʔωϧ (syscallؚΜͩ) ͷؔ਺Λݺͼɺฦ͠ ɾPerlͷؔ਺Λݺͼɺ໭Γ ɾSQL࣮ߦ ɾthreads ɾsignals ɾଞͷΠϕϯτ͕ଟ͍ ϓϩʔϒ 11೥10݄15೔౔༵೔

Slide 11

Slide 11 text

ϓϩάϥϜ΋Մೳ dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ { printf("%s %s",execname,copyinstr(arg0)); }' ʮcorpusʯͱ͍͏ϑΝΠϧΛ։͘ϓϩηεΛදࣔ ๻͕͜ͷεΫϦϓτΛॻ͍ͯ࢖ͬͨ 11೥10݄15೔౔༵೔

Slide 12

Slide 12 text

ϓϩάϥϜ΋Մೳ dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ { printf("%s %s",execname,copyinstr(arg0)); }' ʮcorpusʯͱ͍͏ϑΝΠϧΛ։͘ϓϩηεΛදࣔ ๻͕͜ͷεΫϦϓτΛॻ͍ͯ࢖ͬͨ Πϕϯτ(ϓϩʔϒͷهड़) 11೥10݄15೔౔༵೔

Slide 13

Slide 13 text

ϓϩάϥϜ΋Մೳ dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ { printf("%s %s",execname,copyinstr(arg0)); }' ʮcorpusʯͱ͍͏ϑΝΠϧΛ։͘ϓϩηεΛදࣔ ๻͕͜ͷεΫϦϓτΛॻ͍ͯ࢖ͬͨ ड़ޠ 11೥10݄15೔౔༵೔

Slide 14

Slide 14 text

ϓϩάϥϜ΋Մೳ dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ { printf("%s %s",execname,copyinstr(arg0)); }' ʮcorpusʯͱ͍͏ϑΝΠϧΛ։͘ϓϩηεΛදࣔ ๻͕͜ͷεΫϦϓτΛॻ͍ͯ࢖ͬͨ ΞΫγϣϯ 11೥10݄15೔౔༵೔

Slide 15

Slide 15 text

ϓϩάϥϜ΋Մೳ dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ { printf("%s %s",execname,copyinstr(arg0)); }' ʮcorpusʯͱ͍͏ϑΝΠϧΛ։͘ϓϩηεΛදࣔ ๻͕͜ͷεΫϦϓτΛॻ͍ͯ࢖ͬͨ 11೥10݄15೔౔༵೔

Slide 16

Slide 16 text

σόοΨʔ Request Tracker (rt.cpan.orgͱ͔)Ͱ͸ mod_perlͷςετΛࣦഊͯͨ͠ɻ ๻ͷίϯϐϡʔλ͚ͩͰɻ ͨͿΜ೔ຊޠ͔ͩΒɻ 11೥10݄15೔౔༵೔

Slide 17

Slide 17 text

σόοΨʔ Failed test 'gpg: error reading key: ެ։伴͕ݟ͔ͭΓ·ͤΜ' doesn't match '(?-xism:public key not found)' 11೥10݄15೔౔༵೔

Slide 18

Slide 18 text

σόοΨʔ RT͸೔ຊޠ൛͕͋Δ͚Ͳɺ ʮެ։伴͕ݟ͔ͭΓ·ͤΜʯͱ͍͏༁͕ɾɾɾͳ͔ͬͨʂʁ 11೥10݄15೔౔༵೔

Slide 19

Slide 19 text

σόοΨʔ ͋ʂͦͷจ͸GPG͔Βདྷ͔ͨͳɾɾɾ 11೥10݄15೔౔༵೔

Slide 20

Slide 20 text

σόοΨʔ gpg-2.0.18 $ ack -a ެ։伴͕ݟ͔ͭΓ·ͤΜ gpg-2.0.18 $ 11೥10݄15೔౔༵೔

Slide 21

Slide 21 text

σόοΨʔ 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 $ 11೥10݄15೔౔༵೔

Slide 22

Slide 22 text

σόοΨʔ ͜ͷࣦഊ͸mod_perl͚͔ͩͩΒɺ؀ڥม਺͕ؒҧ͏ͩΖ͏ $LANGɺ$LC_ALL౳ 11೥10݄15೔౔༵೔

Slide 23

Slide 23 text

σόοΨʔ  LC_ALL=en gpg LC_ALL=ja gpg LC_ALL= gpg opensnoop 11೥10݄15೔౔༵೔

Slide 24

Slide 24 text

σόοΨʔ DTraceΛ࢖Θͳ͍Ͱɺ GPGͷࣗମʹprintΛଟ͘௥Ճ͢Δඞཁ 11೥10݄15೔౔༵೔

Slide 25

Slide 25 text

DTraceΛ࢖͏ؾͳ͍ͥɻ ͳͥͳΒɺࠓ͜ͷΞϓϦͷ஗͍ཧ༝Λௐ΂͍͕ͨɺ ͋ΒΏΔΞϓϦͷ஗͍ཧ༝Λݚڀ͢Δઐ໳Ոʹੜ֔Λ͛ͨ͘͞͞ͳ͍Μͩɻ (༁͸૬౰ͰͨΒΊͰ͢ɺΰϝϯͳʂ) 11೥10݄15೔౔༵೔

Slide 26

Slide 26 text

͑͑͑͑͑ʁ ੑೳղੳ͕Լखʹଓ͚͍͔ͨʁ ͋ΒΏΔΞϓϦΛߴ଎Խʹग़དྷͳ͍ʁ ͦͷϘιϘιͰ΋DTraceΛ৆ࢍͩͱࢥ͏ 11೥10݄15೔౔༵೔

Slide 27

Slide 27 text

஫ҙʂ DTraceͷݴޠ͸ɺʮifʯ͕ͳ͍ʂ ୅ΘΓʹɺड़ޠΛ࢖͍·͠ΐ͏Ͷ ß 11೥10݄15೔౔༵೔

Slide 28

Slide 28 text

஫ҙʂ probe { if (ok) { x; } else { y; } } probe /ok/ { x; } probe /!ok/ { y; } ͳͥͳΒɺDTrace͕ҋຐज़Λ࢖͏ͩΖ͏ 11೥10݄15೔౔༵೔

Slide 29

Slide 29 text

Perl ɾ5.10.0Ҏ߱: sub-entry, sub-return ɾ5.15.1Ҏ߱: phase-change (${^GLOBAL_PHASE}) ɹ ɾকདྷʁ: string eval౳ perldoc perldtrace 11೥10݄15೔౔༵೔

Slide 30

Slide 30 text

Perl ɾ5.10.0Ҏ߱: sub-entry, sub-return ɾ5.15.1Ҏ߱: phase-change ɹ ɾকདྷʁ: string eval౳ ๻ͷ࠷ॳPerlʹύονʂ ؆୯ͩͬͨʂ perldtrace 11೥10݄15೔౔༵೔

Slide 31

Slide 31 text

͍ͤͪ͝ΐ͏ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ 11೥10݄15೔౔༵೔

Slide 32

Slide 32 text

one more thing . . . 11೥10݄15೔౔༵೔

Slide 33

Slide 33 text

օͷݸਓͷεϙϯαʔ ຊ౰ʹ ͋Γ͕ͱ͏͍͟͝·͢ 11೥10݄15೔౔༵೔

Slide 34

Slide 34 text

࣭໰͸͋Γ·ͤΜ͔ʁ ೔ຊޠͰ΋̤̠Ͱ͢ʂ slides: http://twitter.com/sartak 11೥10݄15೔౔༵೔