【发布时间】:2011-02-18 01:00:33
【问题描述】:
我正在编写一些开源软件来捕获和处理原始鼠标和键盘事件。当一个事件被捕获时,我与一个 win32 窗口进行通信,以准确地询问如何处理该事件(即传递它或使用它)。它实际上与 HIDMacros 非常相似。
最终决定是否使用事件的部分实际上在我无法控制的内存空间中运行(即 Windows 本身正在运行的东西)。这意味着,不幸的是,我几乎没有能力调试那段代码。幸运的是,这是非常简单的代码,我还没有调试它。
另一方面,我在自己的线程中运行了一个 Win32 事件循环,并处理上述代码部分发送的请求。所以上面的部分向这个窗口发送一条消息,它决定做什么,并返回一个答案。很简单。
问题是这样的。当我附加调试器时,只有 win32 窗口事件循环停止。其他代码继续运行,因为它不在我的实际内存或进程中。当用户执行类似操作时,哦,比如说,按 F10(进入下一行),我注册的键盘钩子将(1)捕捉击键,(2)调用我的 win32 窗口回答。不幸的是,调试器冻结了窗口。最终结果是:我按 F10,Visual Studio 从未收到我的击键。 Visual Studio 本身停止响应所有输入,它冻结,我必须杀死 VS 本身。
现在我已经设法通过使用超时解决了一些问题,但这确实很烦人(即非常容易察觉)而且一点也不理想。我想知道的是,是否有一种编程方式可以从调试器中排除特定线程?有没有办法让 VS 调试器不要停止执行特定线程?除此之外,有没有办法让调试器本身在暂停正常执行之前执行某个操作,并在恢复正常执行后再次执行?
此库将用于其他项目。如果人们在调试时没有突然失去使用键盘的能力,我真的很高兴,因为他们决定链接到我的库。 :) 任何帮助表示赞赏,谢谢。
【问题讨论】:
-
如果您对代码感兴趣,可以在github找到它
标签: c++ visual-studio-2008 winapi debugging