pthread_t de gdb id de thread
Que quelqu'un connait un moyen d'aller d'un pthread_t à ce que GDB affiche avec info threads?
J'ai donc:
(gdb) info threads
37 Thread 22887 0xb7704422 in __kernel_vsyscall ()
36 Thread 22926 0xb7704422 in __kernel_vsyscall ()
35 Thread 22925 0xb7704422 in __kernel_vsyscall ()
34 Thread 22924 0xb7704422 in __kernel_vsyscall ()
33 Thread 22922 0xb7704422 in __kernel_vsyscall ()
32 Thread 22921 0xb7704422 in __kernel_vsyscall ()
(gdb) p m_messageQueue->m_creationThread
$3 = 2694822768
(gdb) p/x m_messageQueue->m_creationThread
$4 = 0xa09fbb70
Personne ne sait comment je figure sur le thread qui c'est? Il semblerait 22768, mais aucun de mes fils vont basse.
- Ce OS est que Linux?
- Oui, désolé. Linux.
- J'étais sur le point de demander la même chose.. mais mon problème est le pire - j'ai besoin de récupérer pthread_id d'abord à partir du contexte (c'est un intégré à la bibliothèque de l'exécution dans d'autres threads du processus.. ew)
Vous devez vous connecter pour publier un commentaire.
La valeur de pthread_t n'est pas la même que celle du fil dépend du système d'id de thread (dans Linux
gettid(2)
) que vous voyez dans GDB.Autant que je sache, il n'y a pas de fonction de convertir entre les deux. Vous avez besoin de garder une trace de qui vous-même.
De nouvelles versions de
GDB
en fait la sortie de la valeur depthread_t
dans leinfo thread
, association depthread_t
avec le nombre de thread trivial.Par exemple, à l'aide de
GDB 7.0
:* 1 process 22749 0x000000385c8cd372 in select () from /lib64/libc.so.6
gdb 7.0.1 imprime:* 1 Thread 22749 0x000000385c8cd372 in select () from /lib64/libc.so.6
gdb 7.2-55.1 imprime:* 1 Thread 0x40c68940 (LWP 22749) 0x000000385c8cd372 in select () from /lib64/libc.so.6
de Sorte que leGDB 7.0
déclaration est un peu floue.