如何调试是否设置了 Windows 事件对象
How to debug if windows event object is set or not?
使用 Visual Studio 调试器时,我有一个 HANDLE 到 Windows 事件同步对象的值。是否可以判断(理想情况下设置一个监视(以显示事件是否已设置?
使用 Visual Studio 调试器无法做到这一点。另一方面,WinDbg 提供了 !handle 扩展命令。传递 UMFlags 0xf
会显示大量信息,包括事件对象是否发出信号。虽然可以从Visual Studio使用WinDbg,但我发现这样做有点乏味。
另一个值得考虑的选项是在ntdll.dll!NtSetEvent
上设置断点(调试 -> 新断点 -> 函数中断...添加条件(右键单击断点 ->条件...( 只有当参数是您感兴趣的特定<handle value>
时,@rax == <handle value>
才会中断。这适用于 64 位版本。对于 32 位构建,条件将是 *((unsigned int*)(@esp+4)) == <handle value>
。
有一个可能很重要的限制:仅当从用户模式代码设置事件对象时,断点才会被命中。如果在为用户模式请求提供服务时事件对象从内核模式发出信号,则不会命中驻留在用户 land 中的断点。
可能跑题了;如果你有内核调试器连接到目标,你可以检查事件的DISPATCHER_HEADER::SignalState。 非零可能意味着发出信号。为什么只有可能?因为它没有记录在案。
相关文章:
- 在Windows上使用ANGLE和GLFW设置C++项目
- 在 Windows 中使用 NetBeans 设置 SFML
- 如何使用CMake在Windows上将应用程序入口点设置为main()C++?
- 在Windows上设置CMake和vcpkg时出错"无法打开包含文件"
- 如何在C++中为 Windows 的 GDI 正确设置库?
- 为没有qmake/VS的Qt Windows应用程序设置.exe图标
- 如何在Windows中获取和设置系统音量
- 设置Windows计时器,访问被拒绝
- 如何正确设置Windows路径以通过CMAKE轻松识别
- 用C++设置windows系统时间
- 使用视觉C++设置"Windows Form Application"中的像素值
- 如何在Qt/C++中设置Windows文件权限
- 如何在运行时设置 Windows 任务栏图标
- 如何设置 windows 文件打开对话框筛选器以包含"必须完成"选项
- 在C++中设置Windows服务描述
- 设置Windows组网映射的标签
- 如何使用c++设置Windows时钟
- 如何设置Windows窗体应用程序(c++)有一个Aero/Glass背景
- 无法设置windows媒体视频9屏幕编码器
- 在QDialog上设置Windows标志会隐藏窗体