Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果设置或未设置windows事件对象,如何调试?_C++_Visual Studio_Winapi - Fatal编程技术网

C++ 如果设置或未设置windows事件对象,如何调试?

C++ 如果设置或未设置windows事件对象,如何调试?,c++,visual-studio,winapi,C++,Visual Studio,Winapi,使用VisualStudio调试器时,我得到了windows事件同步对象句柄的值。是否可以告诉(最好设置一个手表)显示是否设置了事件?使用Visual Studio调试器是不可能的,另一方面,提供扩展命令。传递0xfUMFlags将显示大量信息,包括是否向事件对象发送信号。虽然这样做是可能的,但我觉得这样做有点乏味 另一个值得考虑的选项是在ntdll.dll上设置断点!NtSetEvent(调试->新断点->函数中断…)。添加条件(右键单击断点->条件…@rax=只会中断,如果参数是您感兴趣的特

使用VisualStudio调试器时,我得到了windows事件同步对象句柄的值。是否可以告诉(最好设置一个手表)显示是否设置了事件?

使用Visual Studio调试器是不可能的,另一方面,提供扩展命令。传递
0xf
UMFlags将显示大量信息,包括是否向事件对象发送信号。虽然这样做是可能的,但我觉得这样做有点乏味

另一个值得考虑的选项是在
ntdll.dll上设置断点!NtSetEvent
(调试->新断点->函数中断…)。添加条件(右键单击断点->条件…
@rax=
只会中断,如果参数是您感兴趣的特定的
。这是针对64位构建的。对于32位构建,条件是
*((unsigned int*)(@esp+4))==


如上所述设置断点有一个潜在的重要限制:如果事件对象是从用户模式代码设置的,那么它只会被命中。如果事件对象在为用户模式请求提供服务时从内核模式收到信号,则驻留在用户区的断点不会被击中。

可能与主题无关;如果有到目标的内核调试器连接,则可以检查事件的DISPATCHER_头::SignalState。非零可能意味着有信号。为什么只有可能?因为它没有文档记录