2012-10-23 17 views
5

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) 
...  
+0

's'の代わりに' si'(ステップ命令)を使ってみましたか? –

+0

siはlibopenjpegにステップインしているようですが、その時点では役に立たないと思います...コードの内容を理解するのに役立つ行番号、変数名などが必要です。だから私はgdbのデバッグ情報が欠落していると思います...私はそれを.soファイルまたはgdbに接続する方法を知りたいです。ここで私の "si"のテストです:http://pastebin.com/yaCBkZr4 – Peter

答えて

1

あなたのGDBのバージョンを与えませんでした。 明らかに、これはgdbのバグでした。なぜなら7.0.1と同じ問題があったのですが、7.3.50へのアップグレードはそれを修正したからです。

5

ステップモードを有効にすることができますか?

(gdb) set step-mode on 

これは、stepコマンドは、no debugライン情報(libcのような通常はサードパーティ)ではなく、その上にステッピングが含まれていない関数の最初の命令で停止します。

+1

これは私のために働いた、ありがとう。 – user13107

関連する問題