読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

Debug Hacks Conference 2009 に行ってきた

Debug Hacks の出版記念のイベント,Debug Hacks Conference 2009に参加してきました.


まあいつものようにメモ.

はじめに

id:hyoshiok さんの朗読を聞く.

大和一洋さん

大岩尚宏さん

  • rpmコマンドによるデバッグ
    • /var/spool/clientmqueue/ にファイルがどんどん溜まる
    • % rpm -qf /var/spool/clientmqueue/
    • メールに関するファイルではないかと見当がつく
    • % rpm -ql logwatch | grep etc
  • スクリプトのデバッグ
    • bash の -x オプション
  • 裏話 1/2
    • Hack #32
      • カーネルがストールするはずがtcpdumpがストール
  • 裏話 2/2 ... スライドに 2/2 がない! (ざわざわ
  • 質問 : 「今スライドがなくなってしまったのはバグですか」
    • 「そうですね・・・緊張したんでしょうか」

安部東洋さん

  • 「printデバッグ派です」 (会場大笑い)
  • GDB大変だから少しでも楽にデバッグしたい
    • 例:構造体のリストをダンプしたい
    • ユーザ定義コマンド機能をつかってそれなりにきれいに構造体を出力できるように
    • でもやっぱりdebuginfoつきがいい
    • ptype
    • もっと楽にしたい
    • Cで書いちゃう -> LD_PRELOAD に指定して gdb
  • 質問「gdb frontend とかつかわないんですか」
    • GUIダメなんですよね」
  • 質問「なんでHello World もロクにかけないのにカーネルの世界にはいったんですか」 (w
    • 「目の前に落とし穴があってふみはずしたかなんかですかねw」

島本さん

  • Debug Hacksのコントリビュータです.いくつか記事かきました」
  • malloc や free で落ちた話
    • ライブラリとかのバグだと思ってデバッグできないと思いがち->でも実際はアプリケーションのバグであることがほとんど
    • メモリバグ検出ツールつかってデバッグしよう
      • Valgrind とか

吉田俊輔さん

  • Debug Hacks Hacks ということで番外編 - トラブルシューティングHacks
    • これまで動いてたアプリがうごかなくなった
    • 相関関係 != 因果関係
    • 対処の前にいろいろ情報を保存し
    • 「仕様です」といってしまう場合も!

今王必欲至士 先従隗始 by yuguiさん

  • 今日の内容: 共有
    • 「みんなのデバッグ方法を帰ったら書いてください」
  • デバッグあんましてません(!
  • データの流れに注目してデバッグが基本
  • User Landよりの話をします
  • 仕事ではRails -> 再現は楽
  • 再現をさせるためにはログが重要
  • BDD
    • 最低限のコードを書く
    • バグがある -> 仕様違反がある-> 特定できる
  • しかしレガシーコード*1もある
    • コードを見る
    • なんのために書いてあるかを考える
    • なんのために書いてあるのかがわからなかったら削除する
    • 削除しても動いたら不要
    • 削除したら動かなかったら必要 -> テストを書く
  • Debugで特定ができない
    • 敗北
  • 敗北したら特定する
    • どこにあるのか
    • だれがやったのか
  • 外からattach
  • 誰がデータを壊しているか
    • その場で壊している(自明)
    • もう少し複雑 -> フレームを上っていく
    • それでもわからない -> データを抽出, gdb で define
  • 質問「これまでで一番の敗北は?」
    • 「(前半聞き逃した.)コードを全部書き直して解決した」


てかプレゼンのページめくりがWiiリモコンだった・・・!!

yuguiさんの話はすごく納得した.実践できてないところを反省しつつBDDとまではアレだけどせめてテスト書いたりする方向へがんばっていきたいですね.

表紙

  • 蚊取り豚なのはなぜ?
    • 虫をとりましょう -> 虫といったら蚊 -> 蚊取り線香

で,一応書きますが id:sotarokデバッグ

yuguiさんから宿題も出たので,とりあえず勝手に書いておきます.


まあ,基本的にPHPなので,基本ダンプデバッグです.
うまく動かない場所で var_dump(); exit; でしょうか. 基本的にマルチスレッドにならないPHPはこれでだいたい大丈夫です.
少し苦労したら debug_backtrace() 関数でコールスタックを見たり,xdebugスタックトレースしたり.そんなこと1回くらいしかしたことないですが.
基本的にそれほど特定の難しいバグに出会ったことはありません.


あと,基本的にフレームワーク上に開発することが多いので,フレームワークのログに頼ったりですかね.

まあウェブ開発は,あんま深いところに入らないから基本的に表でうだうだやってるとバグはなくなってる感じかもしれません.


とりあえずテスト書けってかんじですよね.はい.
ほかのPHPerのデバッグも基本的にこんなんじゃねえかなあ・・・と思ったり...

まとめ

shomaさんともちょっと話したけど,LL系の勉強会と結構参加層が違ったりして面白いなーとおもった.カーネル寄りの人たちがおおかったのかな?
最近は自分も下のほうに興味があるから,これから勉強していく分野かもしれないです.

会場で現物購入

Tシャツをおまけでもらった!
いつものとおりミーハー心をきっちり出してサインももらってきた.

ミッションコンプリート.

RIMG0120


Debug Hacks -デバッグを極めるテクニック&ツール

Debug Hacks -デバッグを極めるテクニック&ツール

*1:なんちゃらかんちゃらによると,テストの無いコードのこと