实时跟踪linux线程,linux – 你可以使用多个线程来跟踪应用程序吗?

我正在编写一个面向GUI的调试器,主要针对

Linux,但我将来会计划到其他操作系统的端口.因为GUI必须始终保持交互,所以我有几个线程处理不同的东西.

主要是我有一个“调试事件”线程,它只是循环等待waitpid返回并将接收到的事件传递给其他线程.我这样做是因为waitpid没有超时,这使得很难将它与其他事件循环集成并保持响应(waitpid可以无限期挂起!).

到目前为止,这种策略对于Linux构建非常有效.最近我一直试图让我的调试器线程知道(如在调试应用程序中的线程,而不是调试器本身).

因此,我将ptrace选项设置为跟随克隆事件,并查找将高16位设置为PTRACE_EVENT_CLONE的状态.然后我使用PTRACE_GETEVENTMSG来获取新线程的TID.这一切都适用于我的小型测试工具应用程序.但由于某种原因,当我将该代码放入我的实际调试器时,它失败了. (我得到一个“没有这样的过程”错误代码)

我遇到的一件事是,Windows有一条规则,即只有连接到应用程序的线程才能监听调试事件. Linux的ptrace是否有类似的限制?如果是这样,为什么我的代码适用于其他调试事件?

编辑:

似乎至少waitpid支持从另一个线程等待,该手册页说:

Before Linux 2.4,a thread was just a

special case of a process,and as a

consequence one thread could not wait on the

children of another thread,even when

the latter belongs to the same thread

group. However,POSIX prescribes

such functionality,and since Linux 2.4 a

thread can,and by default

will,wait on children of other

threads in the same thread group.

所以最多这是一个ptrace限制.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值