2012-12-20 28 views
15

Hata ayıklama modunda oluşturduğum statik bir kitaplığım var, ancak içine adım attığımda hala sökme yapıyorum. Hata ayıklama sembollerinin soyulmadığından emin olmak için nm'yi veya başka bir aracı nasıl kullanacağımı bilmek istiyorum. senin dll hata ayıklama sembolleri vardır eğer OSHata ayıklama sembollerinin dışa aktarılıp aktarılmadığını görmek için statik kitaplığı nasıl denetleyebilirim?

için

+2

Herhangi bir işletim sistemi? –

+1

'adam nm' bir başlangıç ​​olabilir. –

+0

Statik lib'inizi hata ayıklama sembolleri ile oluşturduğunuzdan eminseniz, programınızın en son statik lib ile bağlantılı olmadığını düşünüyorum. Diğer makinede derlenmiş/bağlanmıştır veya bu makinede yeniden derlenmiş/bağlanmamıştır. – ernesto

cevap

0

İndir Dependencywalker O algılar. "Semboller" altında "Geçersiz" ifadesini görürseniz, hata ayıklama sembollerinin kaldırıldığı anlamına gelir. Geçerli değerler şunlardır: PDB, CV, DBG, vb.

+5

Dependencywalker sadece statik kütüphaneyi değil, dinamik kütüphaneyi destekler. –

3

Windows aracılığıyla Cygwin dahil olmak üzere birçok işletim sistemi için kullanılabilen file komutunu kullanabilirsiniz.
Eğer 'soyulmamış' yazıyorsa, hata ayıklama bilgisinin mevcut olduğu anlamına gelir.
Yan not olarak, statik libs için .o dosyalarını & file kullanarak doğrudan ayıklamak için ar kullanın. Sen nm ayrıca kütüphaneye paketlenmiş nesne için (varsa) ayıklayıcı sembollerini listelemek izin nm 'ın seçeneği --debug-syms, kullanabilir

+1

'dosya', bu durumda iyi, genel durumda, hata ayıklama bilgisi olmaksızın bir unstripped ikili olması mümkün olmasına rağmen. – Nick

18

.

Hata ayıklayıcı simgeler için ikinci sütun N gösterir. Bu konuda fazlası için

example.o: 
0000000000000000 b .bss 
0000000000000000 n .comment 
0000000000000000 d .data 
0000000000000000 N .debug_abbrev  
0000000000000000 N .debug_aranges 
0000000000000000 N .debug_info 
0000000000000000 N .debug_line 
0000000000000000 N .debug_loc 
0000000000000000 N .debug_pubnames 
0000000000000000 N .debug_str 
0000000000000000 r .eh_frame 
0000000000000000 n .note.GNU-stack 
0000000000000000 r .rodata 
0000000000000000 t .text 
... 

man nm bakın:

Örnek

nm --debug-syms libexample.a 

Çıkış (alıntı) (kütüphanesinde olması nesne example.o varsayar).

+0

Bugün itibariyle, 2015-09-24 ve Mac'te, 'dosya' komutunda --debug-syms bulunmuyor. Bunu bir zamanlar önce biliyordum. Yani değişmiş olmalı. (Trios, yani nm, otool ve dosyalar zaman zaman büyük ölçüde değiştirilir.) Ancak, işlevsellik hala var. ('dosya' sürümü: 5.04) -D seçeneği: ör. dosya -D myGreadLibrary.a D Hata ayıklama iletilerini yazdır. –

0

Statik kütüphane boyutunuzun küçültülmüş olup olmadığını kontrol etmek için strip -S libXX.a kullanabilirsiniz. Hata ayıklama sembolleri içermiyorsa statik kitaplık boyutu değişmeyecektir.

Xcode tarafından oluşturulan statik kitaplığı denetlemek için Mac OS'de çalışır.

Linux and Unix strip command

İlgili konular