1. GDBとは何ですか?
GDB:GNU Debuggerは、GNUプロジェクトによってGNUオペレーティングシステム用に開発されたデバッガーですが、その使用はGNUオペレーティングシステムに限定されません。GDBはUNIX、Linux、さらにはMicrosoftWindowsで実行できます。C、C ++、Objective-C、Pascal、Adaおよびその他の言語で記述されたプログラムをデバッグできます。
GDBの使用:
- プログラムを停止するブレークポイントを設定します
- プログラム内の変数の値を監視または変更する
- トラックコードの実行
注:gccを使用してプログラムをコンパイルする場合は、-gオプションを追加する必要があります(プログラムにデバッグ情報を追加します)。
gcc -o test -g test.c
2.GDBでデバッグする方法
サンプルコード(gdb.c):
#include <stdio.h>
void ShowRevertNum(int iNum)
{
while (iNum > 10)
{
printf("%d", iNum % 10);
iNum = iNum / 10;
}
printf("%d\n", iNum);
}
int main(void)
{
int iNum;
printf("Please input a number :");
scanf("%d", &iNum);
printf("After revert : ");
ShowRevertNum(iNum);
}
プログラムの説明:入力1234などの整数の反転関数を実現し、4321を返します。
しかし、100を入力すると、010が返されます。問題が見つかったと思います。
そこで、gdbツールを使用してデバッグします
gcc -o testgdb -g gdb.c
gdb testgdb
a.
gdbコマンドに精通している
コマンド | 説明 |
---|---|
l | コード行を表示する |
b(休憩) | ブレークポイントを設定する |
実行 | プログラムを実行する |
とは | 可変データタイプビュー |
c | 実行を継続 |
s | シングルステップデバッグ |
n | 単一段階 |
終了する | gdbデバッグを終了します |
印刷 | 変数の値を表示する |
b.
gdbでデバッグし、入力サンプルが100のときにプログラムの実行トラックを追跡します
デバッグの結果、iNum = 10の場合、iNum> 10が偽であることが判明したため、プログラムはループから直接ジャンプしてiNum(10)を出力します。したがって、最終的な出力結果は010になります。
c.
コードを変更する
gdbのデバッグを通じて、問題が見つかりました。つまり、iNum = 10の場合、プログラムはループから飛び出します。この時点でプログラムが飛び出さないようにするには、「while(iNum> 10)」を「while(iNum> = 10)」に変更するだけです。
プログラムを再コンパイルして実行します。