2

私はgdbが初めてです。プログラムをデバッグすると、以下のようなバックトレースしか得られません。

Program received signal SIGSEGV, Segmentation fault.
0x000000003075a238 in ?? ()
(gdb) backtrace
#0  0x000000003075a238 in ?? ()
#1  0x00007fff72825da8 in ?? ()
#2  0x0000000000000008 in ?? ()
#3  0x000000003063c340 in ?? ()
#4  0x0000000000000000 in ?? ()
(gdb) 

いくつかのシンボル情報が欠落していると思います。このメッセージが表示されます

Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found).

だから私は(gdb)シンボルファイル/usr/lib/debug/lib/x86_64-linux-gnu/ld-2.13.soをgdbの起動時に試しましたが、役に立ちませんでした。

どのシンボル情報が欠落しているかを知るにはどうすればよいですか? プロジェクト全体のコードは gcc -g でコンパイルされます。

4

1 に答える 1

0

この問題は、アプリケーションを静的にコンパイルするときに発生する可能性があります (gcc の -static)。この場合、ビルド マシンのライブラリが実行マシンのライブラリと異なる可能性があり、gdb はビルド マシン ライブラリのシンボルを見つけることができません。

私はこの問題を抱えていましたが、私にとって有効な唯一の解決策は、実行中のマシンと同じマシンでアプリケーションをビルドすることでした。

参照: GDB がスタックを表示できず、"#1 0x0000000000000000 in ?? ()" が表示される

于 2012-05-22T01:38:11.493 に答える