2011-07-08 22 views
6

I gdb şu mesajı (sürüm 7.1): Aşağıdaki hata iletisi ileters adımlı çoklu hata

[Thread debugging using libthread_db enabled]

ve komut reverse-step

sonuçları:

(gdb) reverse-step 
Target multi-thread does not support this command 

Şu anda bir seri kod hata ayıklanıyor, bu yüzden kesinlikle çok iş parçacığı gerekmez. Bunu bir şekilde kapatabilir miyim, böylece en son ters hata ayıklama komutlarını çalıştırabilir miyim? Ayrıca, kod OpenMPI ile paralel hale getirilmişse, çok-thread hata ayıklamaya gerek olmayacaktır, değil mi?

Düzenleme: Bu, yalnızca hariç tutulabilecek bir derleme bayrağı olarak mı ayarlandı?

cevap

9

Kullandığınız GDB'nin hangi sürümden söz etmiyorsunuz, ancak birazdan beri libthread-db-search-path parametresi kullanılabilir. o olmadığı

(gdb) set libthread-db-search-path /tmp 
(gdb) start 
Temporary breakpoint 1 at 0x400632: file threads.c, line 14. 
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. 

böylece çoklu işlemli hata ayıklama etkin olmayacak bir dizinde o yardımcı kitaplığı (libthread-db.so) bulunuyor arama için GDB söyleyecektir!

OpenMPI paralel uygulamalarının çok işlemcili olduğundan emin değilim (çok işlemcili oldukları OpenMP'nin aksine), böylece sizin için hiçbir şey değişmeyecektir.

DÜZENLEME: libpthread.so veya eşdeğeri da işlem tarafından yüklendiğinde Multithread ayıklama genellikle sadece (paylaşılan bir kitaplık olarak bağlıysa ldd your-process kontrol etmek) etkin böylece ihtiyacınız yoksa, bir olabileceğini Derleme komut dosyanızdaki sorun.

+0

Çok teşekkürler! Libthread-db-search-path'ı ayarlıyorum, ama yine de şunu elde ederim: [libthread_db kullanarak hata ayıklama etkin] Ana bilgisayar libthread_db kütüphanesini kullanma "/lib/libthread_db.so.1". Buna daha dikkatli bakmam gerekecek. Çoklu iş parçacığı varsayılan olarak etkindir ve üzerinde çalıştığım kod parçası seridir (şimdilik). Gdb sürümü: GNU gdb (GDB) 7.2-ubuntu – tmaric

+0

garip, makinemde çalışıp çalışmadığını iki katına çıkardım! çaresiz iseniz, her zaman/lib/libthread_db.so.1 'kütüphanenizi kaldırabilirsiniz/yeniden adlandırabilirsiniz :) – Kevin

+0

'/ tmp' kullanabileceğiniz en kötü dizinlerden biridir. Sistemdeki herkes kötü niyetli bir '/ tmp/libthread_db.so.1 'kurabilir ve daha sonra ponponlaşırsınız. – aij