私が使っているデバッグの手法を紹介します。Debuggerです。特定の箇所で止めて周辺の値を調べたり、プログラムがどの辺りで止まったかを詳しくレポートさせたりします。MacやLinuxには元から入っていますので、何もインストールする必要はありません。値を好きなように変更してみたり、もしくはプログラムの変数の中身を出力してみたりするだけです。これだけでも立派なデバッグ作業なのです。使い慣れるとgdb無しではプログラムしたくなくなります。↑gdbを使う前にgdbを使うには、実行ファイルにgdbに必要なデバッグ情報を付加してあげる必要があります。デバッグ情報を付加するにはccに-gオプションを付けます。適当なディレクトリに保存してコンパイルします。-g-gオプションでコンパイルするといつものようにa.outが出力されます。下準備はこれで終わりですが、a.outを実行するとエラーがでます。あれば後に付けることができます。continue一時停止したプログラムを一行だけ実行することもできます。関数内には入りません。nextブレークポイントプログラムを一時停止したい場合はブレークポイントを設けます。最初の行でプログラムが一時停止します。ようにコロンを挟んで指定します。<file>:<function_name>プログラム中の全関数を見たい場合は以下のコマンドを実行します。指定することもできます。方法は関数名と同じです。<file>:<line_num>ブレークポイントの一覧が見たい場合は以下のコマンドを使います。確認できる、ブレークポイントの番号です。<expression>などを表示することができます。引数を与えないと現在実行している行周辺を表示します。与えるとその行番号周辺のソースコードを表示します。行づつ表示できるように変更できます。スタックに詰まれた関数の層を表示します。この層の一つ一つをフレームといいます。(whereで確認できる)を指定すると、そのフレームへ移動します。使うことで、上または下方向へ移動できます。本ページは以下のページを参考にしました。詳しくGDBを知りたい方は一読することをお推めします。