GDBデバッグツールを理解する

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)」に変更するだけです。

プログラムを再コンパイルして実行します。

おすすめ

転載: blog.csdn.net/xwmrqqq/article/details/109297304