2012-10-23 31 views
5

Gdb ve bazı paylaşılan kütüphaneler kullanıyorum. Kendi paylaşılan kütüphaneme adım atmak için gdb'yi alabilirim, ancak üçüncü tarafa değil.gdb kullanarak paylaşılan kütüphaneler ile 3. parti işlevlerine adım atmak için

gdb'yi kullanırken, 3. parti kitaplığına adım atmayı ve bana kendi paylaşılan kitaplık kodumdaki bir sonraki satıra gitmek yerine bu opj_ * işlevlerinin içinde yürütmekte olduğu satırları göstermesini bekliyorum (adım). .

Gerçekten de, derleme sırasında bir şey eksik olduğuma eminim, bağlantı kurmakla uğraşmak (gc'ye bazı hata ayıklama bayraklarını geçmek için gcc almak), ama ne olduğunu bilmiyorum, ya da gdb'yi çalıştırırken bir şey hata ayıklama sembollerinin nerede olduğunu söyleme.

Ben yüklü openjpeg kütüphane, hata ayıklama bilgisi ve devel paketlerini vardır:

İşte detaylar.

# 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 

Ben libopenjpeg bağlantılı libjna_openjpeg paylaşılan kütüphane var.

Ben

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 
"... gcc -ggdb" "... gcc -g" "pathtest" Ben her derlenmiş

libopenjpeg ve libjna_openjpeg bağlantılı bir test programı var ve ayrıca çalıştı

bazı yorumlar kaldırıldı ile benim paylaşılan kütüphane kod snippet'i:

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); 

çalışan 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 sürümü

# gdb --version 
GNU gdb (GDB) SUSE (7.3-41.1.2) 
...  
+0

's' yerine' si '(adım talimatı) kullanmayı denediniz mi? –

+0

si libopenjpeg'e adım atıyor gibi görünüyor, ancak bu noktada yararlı olduğunu sanmıyorum ... Kodun ne yaptığını anlamama yardımcı olması için satır numaralarına, değişken adlara veya bir şeye ihtiyacım var. Bence gdb hata ayıklama bilgisini kaçırıyor ... .so dosyası veya gdb'ye nasıl bağlanacağını bilmek istiyorum. İşte benim "s" ile test: http://pastebin.com/yaCBkZr4 – Peter

cevap

1

Sen gdb sürümü vermedi. Görünüşe göre bu, gdb'de bir hata olabilir, çünkü 7.0.1 ile aynı problem vardı, ancak 7.3.50'ye yükselttim.

5

Adım modunu etkinleştirerek deneyebilir misiniz?

(gdb) set step-mode on 

Bu adım komut hiçbir ayıklama satırı bilgisini (libc'nizdeki gibi genellikle 3. parti) yerine üzerinde adım içeren bir fonksiyonun birinci talimatıyla durmasına neden olur.

+1

bu benim için çalıştı, teşekkürler. – user13107