GDB

2011-12-05 31 views
8

Ben gdbserver kullanarak gömülü cihazdan ayıklama am fonksiyon adı görünmez: PC 'GDB

./gdbserver HOST:5000 /home/test_app 

, ben bu şekilde gdb çalıştırın:

arm-none-linux-gnueabi-gdb test_app 

uygulama, çalıştırılmadan sonra ben ayıklamak istediğiniz segfault almak, ancak bunu üreten hangi satır bilmek imkansız:

Program received signal SIGSEGV, Segmentation fault. 
[Switching to Thread 715] 
0x31303030 in ??() 
(gdb) bt 
#0 0x31303030 in ??() 
#1 0x0000dff8 in ??() 
#2 0x0000dff8 in ??() 
Backtrace stopped: previous frame identical to this frame (corrupt stack?) 

(I totall söylemeliyim y GDB'ye yeni)

+1

Hangi bayraklarla derlediniz? GDB, kaynak dosyalarınızın nereden alınacağını biliyor mu, böylece durdurulduğu satırı görüntüleyebilir mi? –

+1

Anlamıyorum. PC'niz ARM mi? Ve GDB sunucusuna hiç bağlı değilsiniz. –

+1

Derleyici yürütme hattınızı ve tüm GDB komutlarınızı gönderebilir misiniz? Tomalak Geret'kal ile burada kesinlikle eksik olan bir şey var, en azından GDB sunucusuna bağlantı ve kaynak dizini belirleme komutu. – thiton

cevap

10

is Ok .. Bilginin son kısmı, ikilinin soyulup silinmediğini açıklar. GDB'de hata ayıklama için, ikili soyulmamış olmalıdır.

nm --debug-sym <your_executable> | grep debug 

Aşağıdaki gibi bazı geçerli baskılarınız varsa, hata ayıklama sembollerinin mevcut olduğu anlamına gelir.

00000000 N .debug_abbrev 
00000000 N .debug_aranges 
00000000 N .debug_frame 
00000000 N .debug_info 
00000000 N .debug_line 
00000000 N .debug_loc 
00000000 N .debug_pubnames 
00000000 N .debug_str 

Ayrıca size list komutla kaynaklarını listeler gerekir bu noktada çizgiyi

Reading symbols from <your_executable>...done. 

follwing gerekirdi GDB çağırdığınızda.

Hem gdb hem de gdbserver öğelerinin aynı sürümleri olduğundan emin olun.

arm-none-linux-gnueabi-gdb --version 
./gdbserver --version 

Yukarıdakilerin tümü doğruysa ve hala backtrace yoksa, yığınınızda kötü bir şeyler oluyor. Kodunuzda/yeni eklenen kodunuzda bazı statik analizler çalıştırmayı deneyin.

+0

Bilgi için teşekkürler! Korkarım onu ​​soydum ... – funkadelic

+0

Bu cevabın doğru olduğunu düşünmüyorum. Görünür işlev isimlerini içeren birkaç soyulmuş dosya buldum (ancak hiçbir kaynak yeniden üretilemez) – Blauhirn

5

Uygulamanızı debug sembolleri etkinleştirilerek oluşturmalısınız. gcc için anahtar sadece komutları

file <your_executable> 

biçimle, kemer vb gibi ikili hakkında bilgi alacak aşağıdaki emin çalışmasını sağlamak için ... ayıklama sembolleri eksikse bu genellikle olur -g

+0

Kesinlikle bir yönü var, ancak gdbserver ile çapraz hata ayıklama daha var. OP, soruyu cevaplamak için henüz yeterli bilgi vermedi. – thiton

+0

Kullandığım tüm derleme seçeneklerini şimdi gönderemiyorum ... ama ben -g kullandım. – funkadelic