Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DTrace: 最強な魔法使いのprintfのようなデバッガ

Shawn Moore
October 23, 2011

DTrace: 最強な魔法使いのprintfのようなデバッガ

DTraceは、コンピューターが何を動作していることを調べるために、とても強力なツールです。プロダクションでも使えますよ。ネットワーク監視という神様が怒らず!

これは、Perlのやさしい世界の厳しい外部でも、デバッグや最適化や監視をするツールです。アプリケーションのコードを汚染していないままで、再起動が必要でなくて、トレースを示す可能があります!しかも、他の使っているモジューでも、カーネルプロセスでも、他のアプリケーションル(例えば:MySQL、Apache)でも、トレースで動作を検査できます。printfのようなデバッグすることが好きの方にとって、DTraceも好きになると思います。

このトークでは、「DTraceはすごすぎるよ!」と聞いたが使ったことがない方のためにDTrace入門です。それ以外で、PerlのDTraceのサポートと、Perlに追加したプローブを説明します。

Shawn Moore

October 23, 2011
Tweet

More Decks by Shawn Moore

Other Decks in Programming

Transcript

  1. ϓϩάϥϜ΋Մೳ dtrace -n ' syscall::open:entry /strstr(copyinstr(arg0), "corpus") != NULL/ {

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

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

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

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

    printf("%s %s",execname,copyinstr(arg0)); }' ʮcorpusʯͱ͍͏ϑΝΠϧΛ։͘ϓϩηεΛදࣔ ๻͕͜ͷεΫϦϓτΛॻ͍ͯ࢖ͬͨ 11೥10݄15೔౔༵೔
  6. σόοΨʔ Failed test 'gpg: error reading key: ެ։伴͕ݟ͔ͭΓ·ͤΜ' doesn't match

    '(?-xism:public key not found)' 11೥10݄15೔౔༵೔
  7. σόοΨʔ 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೔౔༵೔
  8. ஫ҙʂ probe { if (ok) { x; } else {

    y; } } probe /ok/ { x; } probe /!ok/ { y; } ͳͥͳΒɺDTrace͕ҋຐज़Λ࢖͏ͩΖ͏ 11೥10݄15೔౔༵೔
  9. Perl ɾ5.10.0Ҏ߱: sub-entry, sub-return ɾ5.15.1Ҏ߱: phase-change ɹ ɾকདྷʁ: string eval౳

    ๻ͷ࠷ॳPerlʹύονʂ ؆୯ͩͬͨʂ perldtrace 11೥10݄15೔౔༵೔