c++ - 如何调试Windows事件对象是否设置?

标签 c++ visual-studio winapi

使用 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/

相关文章:

c++ - 具有默认目录的 QFileDialog

c++ - 在运算符重载中使用 ()

visual-studio - 在 Visual Studio 中更改解决方案资源管理器的背景颜色

c++ - 如何使用 Digest 身份验证下载 Web 资源

c++ - 如何为 dll 设置入口点

c++ - SQLITE:如何在 UPDATE 语句中使用 SELECT 语句更新表?

c# - 在 C# 中运行 PowerShell cmdlet

c# - Double.Parse 没有给出正确的结果

c++ - WNDPROC 窗口回调过程中收到的句柄与 CreateWindow 返回的句柄之间的区别?

c++ - 为什么要分配一个比请求大小大 1 的数组?