2015-04-20 10 views
5

Sto provando a eseguire il debug di un'applicazione scritta in C++, compilata per un processore basato su ARM che esegue linux.Come identificare l'ID filo stampato in GDB

Quando l'applicazione si arresta in modo anomalo, si arresta su un determinato thread e presumo che il thread sia dove si trova l'errore (errore di segmentazione).

Il mio problema è che sto riscontrando problemi nell'identificare CHE COSA sia questa discussione. Vedo che il seguente stampato in eclissi quando GDB è in esecuzione.

Quali sono i numeri sottolineati in blu e c'è un modo per me di accedervi a livello di codice, in modo che io sappia dove cercare nel codice?

enter image description here

+2

Perché non dare un nome ai fili quando li si genera? –

+0

@ SelçukCihan lo mostrerà anche in GDB? –

+1

Gdb può visualizzare i nomi dei thread, controllare [link] (https://sourceware.org/gdb/onlinedocs/gdb/Threads.html) per ulteriori informazioni –

risposta

2

In aggiunta alla risposta @Heshan Perera.

è anche possibile accedere solo l'ID che è il numero più grande, all'interno del vostro programma

UNIX:

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

WINDOWS: (non testato)

#include <windows.h> 
GetCurrentThreadId(); 
0

Sulla base di this link pubblicato da @Selcuk Cihan nel commento di cui sopra, il primo numero tra parentesi quadre è un identificatore intero assegnato da GDB se stesso e l'altro è lo SysTag assegnato al thread.

0

Una soluzione migliore, se sei su Linux/gcc, è in realtà dare un nome descrittivo alla discussione con pthread_setname_np. gdb utilizzerà quindi questo nome quando si toccano i breakpoint e così via. Si noti che questa è un'estensione GNU di pthreads.