Debug Hacks Nightに参加する
5/28(木)、激しく雨が降る中「Debug Hacks Night」に参加するためミラクル・リナックスにお邪魔してきた。カーネル読書会の会場としておなじみなのだが、不幸なことに私は参加したことがない。よって始めてお邪魔するのでどきどき…と思っていたら、ビルの玄関で見知った方を見つけて安心した。
このイベントは4月に発売された「Debug Hacks」の出版記念イベントの締めくくりとなるそうだ。Debugについてプロの講義を受けられて、ピザとビール(生ビールサーバ!)のパーティに参加できて、運がよければお土産までいただけてしまうという素晴らしい企画。参加できて本当によかった。
内容と感想をつらつらと。例によって敬称略で失礼します。
Debug Hacks Night
よしおかひろたか
著者の思い
デバッグはプログラミングの重要なプロセスだが、書籍としてまとまっているものが非常に少ない
自分が新人のときに読みたい本を書いた
「デバッグといえばこれ」という定番の本になってほしい
ベストプラクティスを共有したい
→Debug Hacks Conferenceもまた開催できたらいいね!
デバッグ入門
バグの定義
→プログラムの不具合(仕様との差異)
デバッグの定義
→プログラムの不具合を修正するプロセス
不具合を修正するのが「デバッグ」
発見するのは「テスト」
回避するのは「トラブルシューティング」
バグのパターン
正常に終了:バグではない
期待する動作をしないで終了
終了しない
デバッグのプロセス
再現するのが大事
手元の環境で再現させられればデバッグがラク
→テストで発見するのが望ましい
客先の環境などで発生
→現象を聞きだすのが大変
原因を突き止めるプロセス
上級者は過去の事例をうまく活用する
→バグDBなどから現象は違っても類似のバグを見つけ出す嗅覚が鋭い
質問してみる
質問するために事象を整理することで解答にたどり着くこともある
同僚が、コミュニティが、答えてくれることもある
デバッガを使おう
任意の場所で停止させられる
→ブレークポイント
変数の値を確認できる
変数の値を設定できる
変数へのアクセスを監視できる
→ウォッチポイント
関数呼び出しの階層を表示できる
→コールグラフ(バックトレース)
printf()ださいよね
デバッグのプロセス
任意の場所にブレークポイントを設定
実行→停止
変数の値を確認
期待通り:
→バグはブレークポイント以降の場所
期待通りじゃない:
→バグはブレークイント以前の場所
gdbの基礎の基礎
emacsのgdb-modeを使ったデモ
詳細はスライドとDebug Hacksを参照
感想
gdbが使えるならprintf()でデバッグするのは愚か
ゲームプログラマ時代、チーフがbtコマンドを教えてくれたのを思い出した。そっちにのめりこんでいたら今頃私はどうなっていただろう?
早速デバッガを使ってみたくなった。なにかCで書くものを考えよう。
Debug Hacks ボツネタ集
ミラクルリナックス 吉田
締め切り / ポリシー / その他の理由でボツになったネタ、触れられなかったツールについて披露。
printfデバッグについて
デバッガが使えない場合有効
→デバッガ自身のデバッグとか
リリース版とデバッグ版が存在する
→管理が煩雑、挙動が変化する(printfを外すと動かなくなる、とか)
→お勧めできない
吉岡さんのポリシーで禁止
トラブルシューティング
バグを「回避」すること
→切り分けと暫定回避(ワークアラウンド)
Debug Hacks Conferenceにて「トラブルシューティングHacks」みたいなプレゼン
→書籍化したい
ログ取得
効果的なログ採取
→syslog、sysstat、mcinfo
パケット調査
→etherreal/wireshark、 tcpdump
→wiresharkはかなり賢いのでヒントになることも多い
開発環境
gdb + emacs
gcc拡張機能について
→知らないとソースを読むことすら難儀する
ソースコード参照システム
→効率的なソース読解のために cscope + vi / emacs
git
→bisect、git + emacs、gitGUI
高速コンパイル
distoc : 分散コンパイル
ccache : キャッシング
ボトルネックの分析
sar、iostat、top、vmstat
/proc/memoinfo
機能に応じたベンチマークツールの選択
→bonnie、iozone、hackbench
チューニング
→sysctlでのカスタマイズ
OSインストール/起動障害
インストーラが起動しない
→kernel bootオプション/サウスチップなど
ディスクが見えない
→ストレージ(RAID/SCSI)
ネットワークにつながらない
→NICドライバ
GUI
→X
テスト
gdbを使ったソースコード全ルート網羅試験
→変数代入を使ってエラールートを通る
サービス監視、自動復旧
Miracle Linuxの製品 / サービス
ZABBIX
→サーバ監視
MAZE
→暴走検知
MiracleFaleSafe
感想
運用に関連するHackはそれだけで出版してほしいぐらいのネタばかり
→「トラブルシューティングHacks」期待してます
知らないツールが山ほどあったのでちゃんと調べよう
人に教えることで学ぶ、というメソッドのうち最強のものが「本を執筆することで学ぶ」なんだろうなぁと実感した
ビアバッシュ+抽選会
- ビアサーバーが登場、生ビールがガンガン振舞われた。素晴らしい。
- ピザ久しぶりに食べた。ビールとピザ最強(相性的な意味で / カロリー的な意味で)。
- 「『Debug Hacks』とTシャツが当たるプレゼント」の当選者発表。なんと、私も当選者のひとりだった。すっかり舞い上がる。
- 続いてTシャツと蚊遣り豚争奪ジャンケン大会。白熱した。ジャンケンにおける「hyoshiok Hacks」重要。
- twitterでフォローしていただいている方とハイフォー。会話スタートのきっかけをイージーにしてくれるという意味でPokenは優秀だと思う。
- OSCに会場提供してくれることでおなじみ日本電子専門学校の生徒さんが何人か来ていた。前途有望すぎる。うち一人と名刺「交換」。個人名刺を持っているところも有望。
- Defcon17の予選が6/6~6/7。日本語情報はこの辺から。本来の意味での「Hacking」コンテストなのか。
- MTM03で「Debug Hacks」の缶バッジが出品されていたそうで、参加者に配布されていた。これはいい。そしてMTM03は行きたかった…
…ということで、ためになるセッションにピザと生ビール、お土産までついて1,000円ポッキリ!という素晴らしいイベントだった。せっかく「Debug Hacks」をいただいたので、とべとべの蔵書として活用しようと思う。ちょうど「再帰呼び出しとスタック」というテーマはどうだろう…と考えていたので、いい教材になるのは間違いない。
吉岡さんはじめ著者の皆様、素晴らしい体験をありがとうございました。「参考文献:Debug Hacks」と堂々と書けるようなキリッとしたネタをエントリできるよう精進します。
http://www.miraclelinux.com/corp/event_seminar/2009/0528_1.html
●MIRACLE LINUX CORPORATION – ミラクル・リナックス
●Yokohama Linux Users Group Site :: カーネル読書会FAQ-カーネル読書会-メインコンテンツ(PukiWiki)
http://www.ylug.jp/modules/pukiwiki/index.php?%A5%AB%A1%BC%A5%CD%A5%EB%C6%C9%BD%F1%B2%F1
●Debug Hacks Nightと『DebugHacks&Tシャツ欲しい』当選者のおしらせ 2009-05-29 – 未来のいつか/hyoshiokの日記
http://d.hatena.ne.jp/hyoshiok/20090529#p1
●Debug Hacks Conference 2009 : ATND
●第三のペンギン: Debug Hacks Conference 2009
http://blog.miraclelinux.com/thethird/2009/04/debug-hacks-con.html
http://blog.miraclelinux.com/thethird/2009/05/debug-hacks-nig.html