0

我正在尝试在 Visual Studio 中调试一个非常古老的 C 程序。我正在逐行浏览一些代码,然后到了DispatchMessage(&msg);我想看看代码下一步去哪里的一行,所以我点击了“Step into”按钮,但我没有被带到任何处理该消息的新代码,而是小黄色箭头刚刚走到同一页的下一行...

这是预期的行为吗?我怎样才能看到DispatchMessage实际做了什么?这是否表明窗口处理程序设置不正确?

额外信息:我试图调试的任务是处理鼠标单击特定窗口。我已经显示了 msg 结构,并且 msg.hwnd 是我单击的窗口(我使用Winspector确认)。msg.message 为 513 (=WM_LBUTTONDOWN)。

4

1 回答 1

3

这是完全预期的行为......

DispatchMessage()实现,User32.dll因此,源代码不可用。在大多数情况下,您必须将 Win32 API 调用视为黑盒。有时,这确实会使调试 Win32 代码成为一项挑战。

请记住,您的武器库中有一些技巧可以调试此类事情:

  1. 继续将DispatchMessage()其视为黑匣子。WndProc在您希望接收的地方放置一个断点并在WM_LBUTTONDOWN那里继续调试。

  2. 让 Winspector 记录进入所有相关窗口的消息。这有助于确保收到消息并按照您期望的顺序。

  3. 如果最坏的情况发生,您可能不得不进入DispatchMessage()或其他一些 API 调用,查看它的反汇编。大多数时候,这并没有什么好处(但我总能学到一些东西)。

选项#3 很有可能不是必需的,您的时间最好花在调试DispatchMessage()而不是在其中进行调试。

于 2012-12-16T14:53:01.003 回答