如何记录/监控选定的WM_USER + n Windows消息?

时间:2015-04-28 09:16:52

标签: delphi delphi-xe2 monitoring message-queue

我的代码中的一些对话框和数据模块需要延迟执行,并通过调用PostMessage()来执行此操作。这是模块之间的,即数据模块将具有在那里发布的PostMessage的处理程序,因此会出现一个对话框。

不同模块中的代码之间存在(当然?)。

我想跟踪程序运行时处理某些特定消息的顺序。

(如何)我可以在Delphi XE2中做到这一点?

所有内容都在主UI线程中运行。

附加说明:

  • 简单地设置断点不起作用(我认为)。其中一些消息可以被多次触发(想想'将树列表节点更新为根'),当我停在断点上时,我害怕干涉。
  • 示例序列:用户启动代码执行,以对话框中的PostMessage(X)结束,底层Delphi事件调用数据模块中必须先完成执行的第三方软件,我执行PostMessage(Y)以“等待”,直到完成。我怀疑Y在X之后被处理。

1 个答案:

答案 0 :(得分:1)

最简单的方法是记录消息。日志记录允许您检查程序的操作,而不会像交互式调试断点那样干扰它。对于消息处理,正如您所发现的那样,断点的干扰使得理解流程变得相当困难。

由于您要发布消息,因此它们由线程的消息队列处理。假设有问题的线程是主UI线程,那么您可以使用Application.OnMessage作为挂钩来执行日志记录。由VCL消息循环处理的所有排队消息都会通过此事件。通常最好使用TApplicationEvents实例来处理Application个事件。