加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 在调试时,有什么快捷方法可以停止在特定的Windows消息

发布时间:2020-12-15 04:27:12 所属栏目:大数据 来源:网络整理
导读:所以我想在特定的API或 Windows消息中放置一个断点. 如果不在任何Delphi版本中编写代码,我找不到任何简单的方法. 有没有办法做到这一点,因为我可以在内存访问中设置断点? 解决方法 要停止对API函数的任何调用,请在Windows.pas的实现部分(或声明感兴趣的函数
所以我想在特定的API或 Windows消息中放置一个断点.
如果不在任何Delphi版本中编写代码,我找不到任何简单的方法.
有没有办法做到这一点,因为我可以在内存访问中设置断点?

解决方法

要停止对API函数的任何调用,请在Windows.pas的实现部分(或声明感兴趣的函数的任何位置)中找到它并设置断点.这样可以处理您在加载时动态链接时使用的功能.对于运行时动态链接(LoadLibrary和GetProcAddress),您将需要一种不同的技术.获取GetProcAddress结果的变量将保存您想要中断的地址,但我不知道如何在该地址设置断点.

停止窗口消息比较棘手,因为可以在许多地方检索消息.您将不得不使用条件断点.

要捕获大多数发布的消息,可以在调用PeekMessage之后在第一行的TApplication.HandleMessage中放置一个断点.将条件设置为Msg.Message = x. HandleMessage处理发布到主线程的消息队列的消息,主要用于Application.Run消息循环以及VCL的模态消息循环.但是,其他模式对话框(例如Windows.MessageBox)不会使用它.

观察发送的消息更难,因为操作系统直接将它们分派到目标窗口过程.您必须在您感兴趣的每个窗口类的窗口过程中设置断点.您可以通过将条件断点放在Classes.StdWndProc中来获得大多数VCL窗口类.

请记住,条件断点可能非常慢.它们通过调试器在那里放置一个无条件断点,当操作系统触发它时,调试器接管,检查条件,然后在条件失败时恢复执行.这可能涉及很多开销,在调试器和应用程序之间切换;程序会收到大量的消息,所以如果你能找到一种方法来避免调试器中断你的程序来检查它们中的每一个,那就去做吧.

如果这对于您正在尝试调试的任何内容都不可行,那么我建议您在描述您正在尝试解决的问题时发布一个新问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读