gdbといくつかの共有ライブラリを使用しています。私はgdbに自分の共有ライブラリに足を踏み入れるが、サードパーティのライブラリではない。gdbを使用して共有ライブラリを使用してサードパーティの機能にアクセス
gdbを使用している場合、私は自分の共有ライブラリコードの次の行に行くのではなく、第三者のライブラリに入り、opj_ *関数内で実行している行を表示することを期待しています。
コンパイル時に何か不足していることがあります(gccにldにいくつかのデバッグフラグを渡す必要がありますが、gdbの実行時に何かが分からない)デバッグシンボルの位置を教えてください。ここで
の詳細は以下のとおりです。
私はopenjpegライブラリ、デバッグ情報とdevelのパッケージがインストールされています。
# zypper search -si openjpeg
Loading repository data...
Reading installed packages...
S | Name | Type | Version | Arch | Repository
--+--------------------------+---------+-----------+--------+-----------
i | libopenjpeg2_0 | package | 2.0.0-1.4 | x86_64 | packman
i | libopenjpeg2_0-debuginfo | package | 2.0.0-1.4 | x86_64 | packman
i | openjpeg2-devel | package | 2.0.0-1.4 | x86_64 | packman
# rpm -ql libopenjpeg2_0
/usr/lib64/libopenjpeg.so.2.0
/usr/lib64/libopenjpeg.so.2.0.0
# rpm -ql openjpeg2-devel
/usr/include/openjpeg-2.0
/usr/include/openjpeg-2.0/openjpeg.h
/usr/lib64/libopenjpeg.so
/usr/lib64/openjpeg-2.0
/usr/lib64/openjpeg-2.0/OpenJPEGConfig.cmake
/usr/lib64/openjpeg-2.0/OpenJPEGTargets-release.cmake
/usr/lib64/openjpeg-2.0/OpenJPEGTargets.cmake
# rpm -ql libopenjpeg2_0-debuginfo
/usr/lib/debug
/usr/lib/debug/.build-id
/usr/lib/debug/.build-id/85/f8603c75aadee0bd66653332d7ce16d0292752
/usr/lib/debug/.build-id/85/f8603c75aadee0bd66653332d7ce16d0292752.debug
/usr/lib/debug/usr/lib64/libopenjpeg.so.2.0.0.debug
私は共有ライブラリlibjna_openjpegをlibopenjpegにリンクしています。
私はテストプログラムは "PATHTEST" 私は "gccの-g ..." と、それぞれをコンパイルしても、 "gccの-ggdb ..."
gcc -ggdb -c -fpic -I/usr/include/openjpeg-2.0 jna_openjpeg.c -lopenjpeg
gcc -ggdb -shared -o libjna_openjpeg.so jna_openjpeg.o -lopenjpeg
gcc -ggdb -I/usr/include/openjpeg-2.0 -L. -o pathtest pathtest.c -ljna_openjpeg -lopenjpeg
を試してみました
をlibopenjpegとlibjna_openjpegにリンクされています
いくつかのコメントを外して私の共有ライブラリのコードの抜粋:
opj_stream_t* p_stream = opj_stream_create_default_file_stream(p_file, p_is_read_stream);
opj_codec_t *p_decompressor = opj_create_decompress(CODEC_J2K);
// my bug I want to debug is here... this always returns 0
p_image = opj_decode(p_decompressor, p_stream);
実行しているGDB
$ gdp pathtest
...
(gdb) s
52 opj_codec_t *p_decompressor = opj_create_decompress(CODEC_J2K);
(gdb) s
59 p_image = opj_decode(p_decompressor, p_stream);
(gdb) s
gdbのバージョン
# gdb --version
GNU gdb (GDB) SUSE (7.3-41.1.2)
...
's'の代わりに' si'(ステップ命令)を使ってみましたか? –
siはlibopenjpegにステップインしているようですが、その時点では役に立たないと思います...コードの内容を理解するのに役立つ行番号、変数名などが必要です。だから私はgdbのデバッグ情報が欠落していると思います...私はそれを.soファイルまたはgdbに接続する方法を知りたいです。ここで私の "si"のテストです:http://pastebin.com/yaCBkZr4 – Peter