代码之家  ›  专栏  ›  技术社区  ›  Steven Behnke

pthread_t to gdb线程id

  •  20
  • Steven Behnke  · 技术社区  · 15 年前

    有人知道从pthread到gdb显示的信息线程的方法吗?

    所以我有:

    (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
    

    有人知道我怎么知道这是哪根线吗?它看起来是22768,但我的线程都没有那么低。

    2 回复  |  直到 15 年前
        1
  •  8
  •   jbcreix    15 年前

    pthread_t的值与该线程的系统相关线程id(在Linux中)不同 gettid(2) )你在gdb看到的。

    afaik,两者之间没有任何函数可以转换。你需要自己记录下来。

        2
  •  21
  •   Employed Russian    15 年前

    新版本的 GDB 实际输出的值 pthread_t info thread ,使 邮戳 线程数很小。

    例如,使用 GDB 7.0 :

    cat t.c
    #include <pthread.h>
    
    void *fn(void *p)
    {
      sleep(180);
    }
    
    int main()
    {
      pthread_t pth1, pth2;
      pthread_create(&pth1, 0, fn, 0);
      pthread_create(&pth2, 0, fn, 0);
      pthread_join(pth1, 0);
      return 0;
    }
    
    gcc -g -m32 -pthread t.c && gdb -q ../a.out
    
    (gdb) r
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib64/libthread_db.so.1".
    [New Thread 0xf7e56b90 (LWP 25343)]
    [New Thread 0xf7655b90 (LWP 25344)]
    
    Program received signal SIGINT, Interrupt.
    0xffffe405 in __kernel_vsyscall ()
    (gdb) info thread
      3 Thread 0xf7655b90 (LWP 25344)  0xffffe405 in __kernel_vsyscall ()
      2 Thread 0xf7e56b90 (LWP 25343)  0xffffe405 in __kernel_vsyscall ()
    * 1 Thread 0xf7e576b0 (LWP 25338)  0xffffe405 in __kernel_vsyscall ()
    (gdb) up 2
    #2  0x080484e2 in main () at t.c:13
    13    pthread_join(pth1, 0);
    (gdb) p/x pth1
    $1 = 0xf7e56b90  ## this is thread #2 above
    (gdb) p/x pth2
    $2 = 0xf7655b90  ## this is thread #3 above