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