Windows 调试:进入DispatchMessage()

Windows 调试:进入DispatchMessage(),windows,visual-studio,Windows,Visual Studio,我正试图在VisualStudio中调试一个非常旧的C程序。我一行一行地浏览一些代码,来到一行DispatchMessage(&msg)我想看看代码下一步到哪里去了,所以我点击了“进入”按钮,但我没有看到任何处理消息的新代码,相反,黄色的小箭头只是沿着同一页的下一行 这是预期的行为吗?如何查看DispatchMessage实际做了什么? 这是否表示窗口处理程序设置不正确 额外信息:我试图调试的任务是在特定窗口上单击鼠标进行处理。我已经显示了msg结构,msg.hwnd是我点击的窗口(我用来确认)

我正试图在VisualStudio中调试一个非常旧的C程序。我一行一行地浏览一些代码,来到一行
DispatchMessage(&msg)我想看看代码下一步到哪里去了,所以我点击了“进入”按钮,但我没有看到任何处理消息的新代码,相反,黄色的小箭头只是沿着同一页的下一行

这是预期的行为吗?如何查看
DispatchMessage
实际做了什么? 这是否表示窗口处理程序设置不正确


额外信息:我试图调试的任务是在特定窗口上单击鼠标进行处理。我已经显示了msg结构,msg.hwnd是我点击的窗口(我用来确认)。消息是513(=WM_LBUTTONDOWN)。

这完全是预期的行为

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

请记住,在您的软件库中有一些技巧可以用来调试这种东西:

  • 继续将
    DispatchMessage()
    视为黑盒。在
    WndProc
    上放置一个断点,您希望收到
    WM_LBUTTONDOWN
    并在那里继续调试

  • 让Winspector记录进入所有相关窗口的消息。这有助于确保收到消息,并且消息的顺序符合您的期望

  • 如果出现最坏的情况,您可能必须进入
    DispatchMessage()
    或其他一些API调用,查看其反汇编。大多数时候,这并没有什么好处(但我总是从中学到一些东西)


  • 选项#3很可能不是必需的,您的时间最好花在调试
    DispatchMessage()
    上,而不是在它里面。

    这完全是预期的行为

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

    请记住,在您的软件库中有一些技巧可以用来调试这种东西:

  • 继续将
    DispatchMessage()
    视为黑盒。在
    WndProc
    上放置一个断点,您希望收到
    WM_LBUTTONDOWN
    并在那里继续调试

  • 让Winspector记录进入所有相关窗口的消息。这有助于确保收到消息,并且消息的顺序符合您的期望

  • 如果出现最坏的情况,您可能必须进入
    DispatchMessage()
    或其他一些API调用,查看其反汇编。大多数时候,这并没有什么好处(但我总是从中学到一些东西)

  • 选项#3很可能是不必要的,您最好将时间花在调试
    DispatchMessage()
    上,而不是在它里面