GNU/Linux >> Linux の 問題 >  >> Linux

コマンドライン パラメータがある場合、GDB を使用してプログラムのコア ダンプ ファイルを分析するにはどうすればよいですか?

GDB でコアをさまざまな方法で使用できますが、実行可能ファイルに渡されるパラメーターを GDB に渡すことは、コア ファイルを使用する方法ではありません。これが、そのエラーが発生した理由である可能性もあります。コア ファイルは次の方法で使用できます。

gdb <executable> <core-file> または gdb <executable> -c <core-file> または

gdb <executable>
...
(gdb) core <core-file>

コア ファイルを使用する場合、引数を渡す必要はありません。クラッシュ シナリオは GDB に示されています (Ubuntu の GDB バージョン 7.1 で確認済み)。

例:

$ ./crash -p param1 -o param2
Segmentation fault (core dumped)
$ gdb ./crash core
GNU gdb (GDB) 7.1-ubuntu
...
Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario
Program terminated with signal 11, Segmentation fault.
#0  __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99    ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)

パラメータを実行可能ファイルに渡して GDB でデバッグする場合は、--args を使用します。 .

例:

$ gdb --args ./crash -p param1 -o param2
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) r
Starting program: /home/@@@@/crash -p param1 -o param2

Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99    ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)

man ページは、他の GDB オプションを確認するのに役立ちます。


コアダンプ ファイルをデバッグするための GDB の簡単な使用方法:

gdb <executable_path> <coredump_file_path>

「プロセス」のコアダンプ ファイルは、「core.pid」ファイルとして作成されます。

(上記のコマンドの実行時に) GDB プロンプトに入ったら、次のように入力します。

...
(gdb) where

これにより、クラッシュ/障害の原因を分析できるスタックの情報が得られます。その他のコマンド 同じ目的で:

...
(gdb) bt full

これは上記と同じです。慣例により、スタック情報全体を一覧表示します (最終的にクラッシュの場所につながります)。


パラメータをスキップするだけです。 GDB はそれらを必要としません:

gdb ./exe core.pid

Linux
  1. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  2. さまざまなパラメータ(ループ)でプログラムを実行しますか?

  3. ファイルがダウンロードされたことを検出することは可能ですか?

  1. 6 つの簡単なステップで gdb を使用して C プログラムをデバッグする方法

  2. mkstemp() で作成されたファイルはいつ削除されますか?

  3. `less` または `more` を使用してファイルを読み取る場合、コンテンツをカラーで取得するにはどうすればよいですか?

  1. リダイレクトされたときに正しい名前のファイルを取得するにはどうすればよいですか?

  2. アプリケーションに SUID が設定されている場合、コア ダンプが作成されないのはなぜですか?

  3. Coreファイルの見方(一般)