使用 Visual Studio 调试器时,我获得了 Windows 事件同步对象的 HANDLE 值。是否可以判断(最好设置一个 watch )来显示事件是否已设置?
最佳答案
使用 Visual Studio 调试器无法实现此操作。 WinDbg另一方面,提供 !handle扩展命令。通过0xf
UMFlags 显示大量信息,包括事件对象是否已发出信号。虽然可以 use WinDbg from Visual Studio ,我发现这样做有点乏味。
另一个值得考虑的选项是在 ntdll.dll!NtSetEvent
设置断点(调试 -> 新断点 -> 在函数处中断...)。添加条件(右键单击断点 -> 条件...)@rax == <handle value>
仅当参数是特定的 <handle value>
时才会中断 您感兴趣。这是针对 64 位版本的。对于 32 位构建,条件为 *((unsigned int*)(@esp+4)) == <handle value>
.
如上所述设置断点有一个(可能很重要)限制:只有当事件对象是从用户模式代码设置时,它才会被命中。如果事件对象在服务用户模式请求时从内核模式收到信号,则驻留在用户态的断点将不会被命中。
关于c++ - 如何调试Windows事件对象是否设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29155655/