Multithreading 在gdb中获取线程名称
在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
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获取线程启动例程的任何方法。显示如何从线程的调用堆栈打印多个帧。如果调用堆栈不是很深,您应该能够使用它来确定每个线程的启动例程。另见。