デバッガーgdbの(ごく簡単な)使い方

はじめに

cygwin上で使えるデバッグツールの説明をしておきます。

デバッグで一番大事なことは、「どこが間違えているか?」をはっきりさせることです。 今回は、実現しようとしているアルゴリズムが正しく、 C言語の文法は一応正しく書かれた(コンパイル時にエラーがでないの意味)プログラムソースで、 誤りがあるため、実行できない、もしくは、実行結果が正しくないケースのデバッグについて 説明します。

その場合、プログラム中のどこのミスが、正しく実行できない原因になっているかを突き止める必要があります。 考えられるシンプルなデバッグ法としては、

  1. 怪しい部分の変数の値を表示させて、ただしく計算されているかを確かめる。
  2. 怪しい部分を部分的にコメントアウトして、その部分で実行がおかしくなっているのかどうか確かめる。

なとがありますので、まずやってみてください。

gdbについて

それでも、「怪しい箇所」の見当がつかない場合は、デバッガーを使用してください。 皆さんの使っている大学の情報センターの環境では、cygwin上で、gdbが使えます。

まず、誤りを含んだ以下のようなソースコード calc.c を考えます。

#include <stdlib.h>

main(){

  int i, *a;

  i = 900000;
  a = (int *)malloc(sizeof(int)*10000);
  a[1] = 12;
  a[i] = 23;
}

このソースをデバッグするには、Cでのコンパイル時に、

   gcc calc.c -o calc.exe -g
 

と -g オプションをつければOKです。実際のデバッグは、

  gdb calc 
 

として、以下のような画面が上がったら、

以下のように (gdb) のプロンプトのあとにrun と入力して実行。

もし、途中でプログラムが止まってしまう場合は、 以下のように問題の箇所(行数や問題のある実行文)を指摘してくれます。

他にも、変数の値を表示させたり、何か条件を満たしたときに途中でプログラム を止めたり、色々使える機能もありますので、WEB上で探してみてください。