gpt4 book ai didi

c - 使用 gdb 和 pthreads 获取有关线程的编程信息

转载 作者:行者123 更新时间:2023-12-02 02:24:25 25 4
gpt4 key购买 nike

使用 gdb,我可以输入“info threads”或“thread apply all backtrace”来获取我所有线程的列表以及它们正在做什么。

我想编写一个 gdb 宏,它会列出所有正在运行的线程。该宏将检索线程号(即 gdb 'thread' 命令的参数),然后获取我已定义并存储在线程本地存储中的线程的名称。

在伪代码中,这看起来像:

for each thread in threads
t thread
f 1
set $name = my_name
f top
printf "Thread %d has name %s and is currently doing %s\n", thread, $name, curr_frame
next

获取 curr_frame 的字符串可能会有一些小的复杂性,但如果我能为剩下的部分找到一个好的框架,我愿意暂时省略它。

我的程序中有一个线程列表,为此我可以获得与显示为“信息线程”输出的一部分的线程指针相对应的 pthread_t:

(gdb) info thread
....
30 Thread 0x5221c940 (LWP 25304) 0x00000031c5a0aee9 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
....
(gdb) p *(_thread_t*)my_threads[0].pid
$4 = {
t_id = 0x5221c940,

如您所见,t_id 成员与输出中的线程地址相同,但我真的找不到任何方法来以编程方式利用这一事实。

有人知道如何做到这一点吗?

最佳答案

从 7.0 版开始,GDB 可在 python 中编写脚本,因此您几乎可以按原样实现您的伪代码。请参阅有关访问线程的文档 here并获取堆栈框架 here .

我认为最简单的方法是在 source.py 文件中编写程序,然后在 GDB 中运行:

source source.py

关于c - 使用 gdb 和 pthreads 获取有关线程的编程信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com