![]() |
The Geek Stuff |
How to Debug C Program using gdb in 5 Simple Steps - The Geek Stuffにおいてgdbを使ったCプログラムの基本的なデバッグ方法が紹介されている。あらかじめ問題を仕込んである短いCのソースコードと、それをデバッグオプション付きでビルドして、実際にどのようにデバッグを実施すればいいかが簡潔にまとまっていて参考になる。同記事では次のようなCで記述したソースコードを用意。
このソースコードは階乗を計算するという内容。「for (i = 1; i < num; i++) j = j * i」の部分が階乗計算部分だが、変数jが初期化されていないため階乗の計算になっていない。jにどういった数値が入っているかは実行する環境によって左右される。How to Debug C Program using gdb in 5 Simple Stepsでは階乗計算が実施される前の段階にブレークポイントを設定して変数の内容を表示させ、jを適切な値に初期化することを忘れていることを発見するというストーリーで使い方を紹介している。
#include <stdio.h>
int
main()
{
int i, num, j;
printf("Enter the number: ");
scanf("%d", &num);
for (i = 1; i < num; i++)
j = j * i;
printf("The factorial of %d is %d\n", num, j);
}
実際の処理の流れを上の画像に、基本的なコマンドと操作方法を次にまとめておく。
| コマンド | 内容 |
|---|---|
| gcc -g | コンパイル時に-gを指定する。コンパイル後のバイナリにデバック情報が埋め込まれるため、デバッグが簡単になる。 |
| gdb command | コンパイルしたコマンドを指定してデバッガgdbを実行する。 |
| gdbの基本的なコマンド | 内容 |
|---|---|
| run | プログラムを実行する。 |
| break 行数 | 指定した行でプログラムの実行を停止するようにする(ブレークポイントの設定)。デバッグするにあたってもっとも基本となる方法。 |
| list | ソースコードを表示する。行数を指定することもできる。 |
| print 変数 | 変数の内容を出力する。デバッグするにあたってもっとも基本となる方法。 |
| c | 次のブレークポイントまで実行する。 |
| n | 次の1行を実行する。関数は1つの処理として実行する。 |
| s | 次の処理を実行する。関数を処理する場合、その関数へ飛んで一つ一つ処理を実施する。 |
| less(1)コマンドの便利な使い方10 [2010/2/4] |
| 消えたサイトやページを表示させる4つの方法 [2010/1/26] |
| top(1)コマンドの活用例15 [2010/1/7] |
| UNIXのsedチュートリアル10 [2009/10/1] |
| システムモニタリングツール、人気トップ5 [2009/9/7] |
| 2009ベストオープンソースソフトウェア40 - InfoWorld [2009/9/3] |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
熊田曜子が最新DVDで美乳引き立つゴールドビキニ姿を披露『WOMAN~本性~』 [22:30 2/10] エンタメ |
|
「グラビア甲子園」特別賞の新人・藤村椿の"フレッシュ・ヒップ"が弾ける! [22:30 2/10] エンタメ |
|
TVアニメ『エウレカセブンAO』、新キャラおよびメカの設定画を紹介 [22:21 2/10] ホビー |
|
宮本恒靖を迎え「選手のセカンドキャリア」を考える! [22:08 2/10] キャリア |
|
NMB48山田菜々・福本愛菜、恋人モードで妄想セリフ!? [22:08 2/10] キャリア |