gdb といくつかの共有ライブラリを使用しています。gdb を自分の共有ライブラリにステップインさせることはできますが、サードパーティの共有ライブラリにはステップインさせることはできません。
gdb を使用する場合、"s" (ステップ) がサードパーティ ライブラリにステップインし、自分の共有ライブラリ コードの次の行に移動するだけでなく、これらの 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
libopenjpeg にリンクされた共有ライブラリ libjna_openjpeg があります。
libopenjpeg および libjna_openjpeg にリンクされたテスト プログラム「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
一部のコメントを削除した共有ライブラリ コードのスニペット:
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)
...