Multithreading 在gdb中获取线程名称

Multithreading 在gdb中获取线程名称,multithreading,Multithreading,在gdb中,当我发出命令info th 我得到的结果如下: (gdb) info th 5 Thread 0x7ffff3b54700 (LWP 1542) 0x00007ffff6705343 in poll () from /lib64/libc.so.6 4 Thread 0x7ffff2752700 (LWP 1544) 0x00007ffff670f163 in epoll_wait () from /lib64/libc.so.6 3 Thread 0x7ffff31

在gdb中,当我发出命令
info th
我得到的结果如下:

(gdb) info th
  5 Thread 0x7ffff3b54700 (LWP 1542)  0x00007ffff6705343 in poll () from /lib64/libc.so.6
  4 Thread 0x7ffff2752700 (LWP 1544)  0x00007ffff670f163 in epoll_wait () from /lib64/libc.so.6
  3 Thread 0x7ffff3153700 (LWP 1543)  0x00007ffff670f163 in epoll_wait () from /lib64/libc.so.6
  2 Thread 0x7ffff4763700 (LWP 1541)  0x00007ffff69c7930 in sem_wait () from /lib64/libpthread.so.0
* 1 Thread 0x7ffff7fe17e0 (LWP 1520)  0x00007ffff66d2cdd in nanosleep () from /lib64/libc.so.6
我可以得出结论,有5个线程正在运行。但是我不能得到线程的函数名

如何使用gdb获取线程的函数名

线程5在
poll()
上暂停执行。但是
poll()
由线程启动的函数调用。 在我的例子中,我为
设置\u socket\u到\u listen()
声明了线程。从其中调用“poll”。我想打印
“将插座设置为侦听”

pthread_t l_thread; 
pthread_create(&l_thread, 0, (void *)&set_up_socket_to_listen, NULL); 

如果要查看线程5,我想打印
设置\u套接字\u以\u侦听
名称

(gdb) thread 5
(gdb) bt

将向您显示该线程的调用堆栈。

您似乎认为一个线程与一个特定函数相关联。事实并非如此,一个线程可以在任意数量的函数中运行。您所能做的最好的事情就是获取当前正在执行的函数,这正是gdb在这里向您展示的。我知道这一点。但我只想打印函数的名称。有可能吗?有什么功能?例如,它清楚地告诉您线程5此时正在执行
poll()
。线程在poll()上暂停执行。但是poll()由线程启动的函数调用。在我的例子中,我声明了setup\usocket\u to\usisten()的线程。从这里,某些系统函数调用“poll”。我想打印“设置插座以监听”。pthread_t l_线程;pthread_create(&l_-thread,0,(void*)和set_-up_-socket_-to_-listen,NULL);我想打印“setup\usocket\u to\u listen”名称。我不知道从gdb获取线程启动例程的任何方法。显示如何从线程的调用堆栈打印多个帧。如果调用堆栈不是很深,您应该能够使用它来确定每个线程的启动例程。另见。