3

我想知道是否有办法找出使用 gdb 或其他检查工具为特定 epoll 实例注册了哪些描述符(和预期事件)?

使用 poll 或 select 时很容易找到它,因为所有这些信息都可以在正在运行的进程可见的内存中免费获得,并且可以在调试器中进行探索。但是,epoll 有点不同,因为它将所有这些数据保存在内核空间中。我意识到,我可以使用跟踪来检测我的代码,以便在每个特定时刻了解 epoll 实例预期的事件,但是采用其他方式对我来说非常方便。

谢谢

4

1 回答 1

2

来自 Linux Programmer's manual page for 'epoll_ctl' under 'ERRORS'

 EEXIST op was EPOLL_CTL_ADD, and the supplied file descriptor fd is already registered with this epoll instance.

如果您使用 EPOLL_CTL_ADD 并获得返回值 -1 并且 errno 是 EEXIST,则文件描述符已经注册。显然,这具有注册文件描述符的副作用,因此您可能需要使用 EPOLL_CTL_DEL 进行调用以删除任何您不打算在 epoll 中出现的内容。

一般来说,我建议避免将错误情况用作程序的常规流程。但听起来你只是为了调试而这样做,所以我真的不认为这是一个问题。无论如何,调试器实际上都是黑客。

于 2013-03-09T19:33:22.517 回答