差分

ナビゲーションに移動 検索に移動

デバッグ

4,279 バイト追加, 2013年8月22日 (木) 08:08
作成
'''デバッグ'''とは、[[バグ]]を探して修正する作業のことである。

==主なデバッグ手法==
===printfデバッグ/putsデバッグ===
主に[[C言語]]/[[C++]]の[[CUI]]プログラムのデバッグに使用する。

[[printf関数]]を使ってその時点での変数や式の値を出力したり、
[[puts関数]]を使ってどこを処理しているか、どこで落ちるかを見つけたりする。
特に後者は[[fflush関数]]と併用することが多い。

===MessageBoxデバッグ===
printfデバッグ/putsデバッグの[[Windows]]の[[GUI]]プログラム版。

[[MessageBox関数]]を使い、どこを処理しているかや変数・式の値を表示する。
使い方を間違えると、大量の[[ダイアログ]]が表示されてしまい死に至るので注意するべき。

===Beepデバッグ===
主にWindowsのGUIプログラムで、
MessageBox関数を使うと大量のダイアログが表示されて死に至る場面や処理を停止したくない場面(通信など)で使用する。

[[Beep関数]]で音を出す。一度に1~3箇所程度のみ設置し、どこを処理しているかを調べる。
どのBeep関数を通ったかは、数種類なら音の高さや長さで識別できる。

===[[統合開発環境|IDE]]の[[デバッガ]]===
統合開発環境に搭載されているデバッグ機能を使用する。
通常は[[デバッグモード]]でコンパイルしないと利用できない。
デバッグモードでコンパイルしたバイナリは、通常モードに比べてサイズが大きい、単独で実行できないなどの変化が生じる。

デバッグモードでコンパイルし、デバッグ実行すると、
事前に[[ブレークポイント]]を設置して処理を一時停止させ、そこからステップ実行(1文ずつ実行)させることや、
変数の値を[[ウォッチ]]することができるようになる。

===[[gdb]]===
[[日本情報オリンピック]]本選などの統合開発環境が使えない場面の場合でも、gdbというデバッガが使える場合がある。
ソースコードをエディタで開き、端末でgdbを実行すれば、統合開発環境のデバッガとほぼ同じ感覚で使える。

[[Mac]]では[[ログイン]]して最初に使用するとき、自分の[[パスワード]]を入力する必要があるかもしれない。

====準備====
コンパイルオプション-g3をつけてソースコードを[[コンパイル]]する。この時[[最適化]]はしない方がいい。

うっかり癖で[[strip]]をかけてしまうとgdbが使えなくなるので、その時はコンパイルしなおすこと。
====起動====
<pre>$ gdb 実行ファイル</pre>でgdbを起動できる。
====ブレークポイントの設定====
; break 行番号 : 指定行にブレークポイントを設定する
; info breakpoints : ブレークポイントの一覧を表示する
; delete 一覧のNumで確認できる番号 : 指定したブレークポイントを解除する
====プログラムの開始====
runコマンドでプログラムを実行できる。
異常終了した場合、その行が表示される。
====実行時の操作====
ブレークポイントで停止した後、以下の操作(一例)ができる。
; next : ステップオーバー(次が関数呼び出しの場合、関数の処理を全て実行して次の行に行く)を行う
; step : ステップイン(次が関数呼び出しの場合、関数内の処理にデバッグが移る)を行う
; continue : プログラム終了か次のブレークポイントまで実行する
; print 式 : 式の(プログラム内の変数の値を反映した)値を表示する。変数への代入もできる。
====終了====
quitコマンドで終了できる。「対象を[[kill|殺します]]がいいですか?」みたいなことを聞かれたら、yを入力すればいい。
====その他====
* [http://www.fireproject.jp/feature/gdb/ GDB(ファイヤープロジェクト )]
* [https://www.google.co.jp/search?q=gdb+%E4%BD%BF%E3%81%84%E6%96%B9 gdb 使い方 - Google 検索]

==関連項目==
* [[テスト]]
* [[デバッガ]]
* [[統合開発環境]]
匿名利用者

案内メニュー