狠狠撸
Submit Search
Debug Hacks Night
?
Download as ODP, PDF
?
1 like
?
797 views
Hiro Yoshioka
Follow
Debug Hacks Nights How to Debug. Introduction of GDB.
Read less
Read more
1 of 31
Download now
More Related Content
Debug Hacks Night
1.
Debug Hacks Night
5/28/'09 よしおかひろたか(Debug Hacks著者) [email_address] http://d.hatena.ne.jp/hyoshiok/ http://blog.miraclelinux.com/yume/
2.
Debug Hacks Debug
Hacks -- デバッグを極めるテクニック&ツール 吉岡 弘隆,大和 一洋,大岩 尚宏,安部 東洋,吉田 俊輔 ISBN:978-4-87311-404-0 オライリー?ジャパン 2009年4月22日
3.
デバッグ入門 Debug Hacks、著者の思い
デバッグ入門 GDBの基礎の基礎 Q&A
4.
Debug Hacks著者の思い プログラミングの重要な要素なのに、書籍という形でまとまっていない(ほとんど類書がない)
新人のとき、読みたかった本を書いた 定番の書籍になって、プログラミング初心者が取り合えず読む本になってほしい デバッグのベストプラクティスを共有したい ブログとか Debug Hacks Conference
5.
デバッグ入門 デバッグとは、ソフトウェアの不具合(バグ)を修正するプロセス ソフトウェアの不具合を発見するプロセスのことはテストとよぶ
ソフトウェアの不具合を修正するのではなく回避する方法をトラブルシューティングとよぶ Debug Hacksは主に(狭義の)デバッグについて解説した書籍
6.
バグ ソフトウェアの不具合(仕様との差異) テストで発見する
それ以外で発見される たまたま使っていて発見、…
7.
バグのパターン 正常に終了(バグではない) 期待する動作をしないで終了
期待する出力をしない、クラッシュ、遅い、 終了しない デッドロック、無限ループ、
8.
デバッグのプロセス 問題の再現 環境設定
ヒアリング 現象の確認 問題の理解、解析 原因が不明? 過去にあった同様の問題を検索(バグDBなど) バグ発生へ、そなえる 同僚に説明する コミュニティへ質問する
9.
デバッガを使おう 任意の場所にブレークポイントを設定できる。 プログラムを変更しなくても、変数の値を確認することができる。
プログラムを変更しなくても、変数に任意の値を設定できる。 変数に値が代入されたときに停止することができる。 コールグラフ(バックトレース)を表示できる。 printf()デバッグださいよね。
10.
デバッグのプロセス 期待しない値を出力して終了というケース 任意の場所にブレークポイントを設定
実行 任意の変数の値を確認(期待通りか) 期待通りじゃない場合は、実行前半部分にバグ? 期待通りの場合は、実行後半にバグ? 終了しないケースは後述
11.
GDBの基礎の基礎 Gccでコンパイルする
$gcc -g -Wall Makefile ではCFLAGSにオプションを追加 INSTALLやREADMEファイルなどを確認
12.
GDBの基礎の基礎 起動 $gdb
実行ファイル名 $gdb -c コアファイル 実行ファイル名 emacsから起動するときは、M-x gdb
13.
GDBの基礎の基礎 ブレークポイントの設定 任意の場所で停止する
break 関数名 break 行番号 break ファイル名:行番号 break ファイル名:関数名 break [+|-]オフセット break *アドレス
14.
ブレークポイント 設定したブレークポイントの確認 info
break
15.
実行 run コマンド
run 引数 main()にブレークポイントを設定してmain()まで実行する startコマンド
16.
ブレークしたら どこで停止したか。 backtraceコマンド(btと略す)
17.
変数の表示 print[/フォーマット] 変数
`x' 16進数で表示 `d' 10進数で表示 `u' 符号なしの10進数で表示 `o' 8進数で表示 `t' 2進数で表示。`t' は "two" からくる。 `a' アドレス `c' 文字(ASCII)として表示 `f' 浮動小数点 `s' 文字列として表示
18.
アドレスの表示 x[/NFU] アドレス
N繰り返し回数 Fフォーマット U単位 `b' バイト `h' ハーフバイト(2バイト) `w' ワード(4バイト) デフォルト `g' ジャイアントバイト(8バイト)
19.
逆アセンブル disassemble コマンド
20.
実行の再開 ステップ実行 continue
finish/until
21.
ステップ実行 ソースコード一行分実行する next
ソースコード一行分実行し停止する。関数呼び出しの場合、関数を実行後停止する。 step ソースコード一行分実行し停止する。関数呼び出しの場合、その関数の最初の実行文を実行し停止する。(もぐって行く)
22.
continue 実行を再開する ブレークポイントで停止する
実行を终了する
23.
finish/until finish 関数を最後まで実行
関数の入り口でいろいろ調べた後、最後まで一気に実行したいとき便利 until ループが終わるまで実行 ループの入り口でいろいろ調べた後、ループを一気に実行したいとき便利
24.
実行の再開のまとめ next/step continue
finish/until
25.
変数へ代入されたとき止めたい ウォッチポイント。任意の変数に代入された時に停止する。 watch
式(式が変更された時に停止) awatch 式(式が参照、変更された時に停止) rwatch 式(式が参照された時に停止) どこであるアドレスが変更されるか、よく分からないときなどに利用すると便利。実行速度の低下がある。
26.
その他のブレークポイント ハードウェアブレークポイント(hbreak) 一時ブレークポイント(tbreak)
27.
変数の値の変更 set variable
変数=式 ソースコードを変更する前に試行錯誤して確認できる。
28.
期待しない値のケースのまとめ 任意の場所にブレークポイントを設定 実行開始
停止したら値の確認 実行の再開 バグの原因を見つけるまで上記を繰り返す
29.
終了しない場合 無限ループ、デッドロックなどで終了しない場合のデバッグ 当該プロセスのプロセスIDを調べる
$ ps aux|grep プログラム名 プロセスへアタッチする attach プロセスID アタッチすると実行を停止するので、デバッグをはじめる
30.
コアファイルがある場合 $gdb -c
コアファイル プログラム名 コアファイルを生成した時点でのスタックトレースなどが見れる
31.
まとめ GDBの基本の基本を紹介した GDBは便利な機能満載なので使ってみよう
Debug Hacksの感想、コメント、誤植の発見などなど、著者(hyoshiok@gmail.com)まで教えてください。
Download