サーチ…


備考

GDB(GNUプロジェクトデバッガ)は、実行中のプログラムとコアプログラムを解析するのに優れたコマンドラインベースのデバッガです。 ユーザマニュアルによると、GDBはC、C ++、D、Go、Objective-C、Fortran、Java、OpenCL C、Pascal、Rust、アセンブリ、Modula-2、Adaをサポートしています

GDBはほとんどのデバッガと同じ機能セットを持っていますが、GUIエレメントをクリックするのではなく、コマンドを入力することに基づいています。これらの機能の一部は次のとおりです。

  • ブレークポイントの設定
  • 変数の値を表示します。
  • 変数をテストするための値を設定する。
  • スタックの表示

GDBとは?

GNUデバッガの略語であるGDBは、UNIXシステムでCおよびC ++プログラムをデバッグする最も一般的なデバッガです。 GNUデバッガ(gdbとも呼ばれる)は、CおよびC ++プログラムをデバッグするためのUNIXシステム用の最も一般的なデバッガです。

GNUデバッガは、以下の情報を得るのに役立ちます:

  • コアダンプが発生した場合、プログラムがクラッシュした文または表現は何ですか?

  • 関数の実行中にエラーが発生した場合は、
    プログラムにはその関数への呼び出しが含まれています。
    パラメーター?

  • プログラムの実行中の特定の時点でのプログラム変数の値は何ですか?

  • プログラムの特定の表現の結果は何ですか?

GDBの起動

GDBを起動するには、端末で、

gdb <executable name>

mainというプログラムで上記の例を実行すると、コマンドは次のようになります。

gdb main

ブレークポイントの設定

プログラムの状態を確認できるように、ある時点でプログラムを停止することをお勧めします。プログラムを一時的に停止させたい行をブレークポイントと呼びます。

break <source code line number>

あなたのプログラムを実行する

あなたのプログラムを実行するために、コマンドはあなたが推測したように、

run

コアを開く

gdb -c coreFile pathToExecutable  

コアファイルの操作

この本当に悪いプログラムを作成しました

 #include <stdio.h>
 #include <ctype.h>

// forward declarations


void bad_function()
{

   int *test = 5;

   free(test);

}


int main(int argc, char *argv[])
{
   bad_function();
   return 0;
}


gcc -g ex1.c

./a.out   //or whatever gcc creates
Segmentation fault (core dumped)

gdb -c core a.out

Core was generated by `./a.out'.

プログラムはシグナルSIGSEGVで終了しました。 #0 __GI___libc_free(mem = 0x5)at malloc.c:2929 2929 malloc.c:そのようなファイルやディレクトリはありません。

(gdb) where

#0 __GI___libc_free(mem = 0x5)malloc.c:ex1.c:bad_function()内の2929#1 0x0000000000400549:ex2:main(argc = 1、argv = 0x7fffb825bd68)の0x0000000000400564

私が-gでコンパイルして以来、whereを呼び出すとbad_function()の12行目のコードが気に入らないことがわかります

それから私は自由にしようとしたテスト変数を調べることができます

(gdb) up

ex1.cのbad_function()内の#1 0x0000000000400549:12 12 free(test);

(gdb) print test

$ 1 =(int *)0x5

(gdb) print *test

アドレス0x5のメモリにアクセスできない

この場合、バグはかなり明白です。mallocで作成されていないアドレス5が割り当てられたポインタを解放しようとしましたが、フリーでは何をすべきか分かりません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow