GDB

2015-04-20 18 views
5

'de yazdırılan iş parçacığı kimliğini program aracılığıyla tanımlama C++ dilinde yazılan bir ARM tabanlı işlemci için derlenen bir uygulamada hata ayıklamaya çalışıyorum.GDB

Uygulama aralıklı olarak kilitlendiğinde, belirli bir iş parçacığında durur ve iş parçacığı hatanın nerede olduğu (bölümleme hatası) olduğunu varsayalım.

Sorunum, Bu iş parçacığının NE olduğunu belirlerken sorun yaşıyorum. GDB çalışırken, aşağıdaki tutulması basılmış olduğunu görüyorum.

Maviyle altı çizilen sayılar nelerdir ve onlara program aracılığıyla erişebilmem için bir yol var mı?

enter image description here

+2

Neden iş parçacığı bunları oluştururken bir isim vermiyorsunuz? –

+0

@ SelçukCihan bu daha sonra GDB'de mi gösterecek? –

+1

Gdb, iplik isimlerini görüntüleyebilir, daha fazla bilgi için [link] (https://sourceware.org/gdb/onlinedocs/gdb/Threads.html) adresini kontrol edin –

cevap

2

@Heshan Perera'a ek olarak yanıt.

Ayrıca programı içinde,

UNIX büyük sayıdır parçacığı kimliği erişebilirsiniz:

#include <sys/syscall.h> 
syscall(SYS_gettid); 

WINDOWS: (Test edilmedi)

0

yukarıdaki açıklamada @Selcuk Cihan tarafından yayınlanmıştır this link dayanarak, köşeli parantez içindeki ilk sayı GDB kendisi tarafından atanan bir tamsayı tanımlayıcıdır ve diğer iplik tahsis Systag olup.

0

Daha iyi bir çözüm

#include <windows.h> 
GetCurrentThreadId(); 
, Linux/gcc kullanıyorsanız, pthread_setname_np ile iş parçacığına açıklayıcı bir ad vermeniz gerekir. gdb daha sonra kesme noktalarına vurarak bu ismi kullanır, vb. Bunun pthreads için bir GNU uzantısı olduğunu unutmayın.