gpt4 book ai didi

c++ - 定位事件处理程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:29 27 4
gpt4 key购买 nike

我有一个非常大的 MFC 应用程序的源代码,但文档很差。我试图在代码执行时对其进行跟踪,以了解它在做什么。不幸的是,一旦用户获得对应用程序的控制权,我就需要在事件处理程序上设置一个断点,以便在调试器中再次开始跟踪。如果我尝试逐行执行代码,那么用户将永远无法控制应用程序,因为它开始逐步执​​行空闲例程。

我需要的是在单击按钮之前确定与该按钮关联的事件处理程序的名称。这样,我就可以在该事件处理程序上设置一个断点,并在按下时立即遍历相关代码。

由于应用程序的大小,在每个事件处理程序中手动设置断点是不可行的。如果有一种简单的方法可以在包含特定模式的所有行上设置断点,那也可以。我可以在 (alt+e+f+i) 中搜索“::On”,然后同时在数千个结果匹配项上设置断点。我必须手动取消选择以这种方式无意中触发的所有断点,但这仍然有效。有办法做到这一点吗?

此外,我尝试在资源查看器中搜索并找到看起来像我想要的按钮的东西,但一直找不到。即使我这样做了,我也不确定这会有什么帮助。难道不应该在某处列出图形元素及其相关事件的简单列表吗?

我还有哪些选择?

最佳答案

好的,我要做的第一件事显然是您已经尝试过的:在资源查看器中查找相关控件的资源 ID。如果您有 ID,则可以在类声明中搜索它,其中将有 MFC 宏将“单击”事件映射到该控件的回调。回调当然是您正在寻找的事件处理程序。

因此,如果您无法用眼睛找到按钮,请搜索它。有一些合理的可能性:

  1. 它在资源文件中,但您看不到它 - 可能它被其他按钮覆盖了;
  2. 在应用中动态命名;
  3. 它是在应用程序中动态创建的。

在您的项目中搜索出现在按钮上的文本 - 匹配大小写并尝试先包含引号,如果不成功则不包含引号。您可能必须手动打开和搜索资源文件(关闭资源编辑器并将 RC 文件作为文本加载到 Visual Studio 中,然后进行搜索)。

如果它在资源文件中,您将能够将控件与 ID 相匹配。如果根本找不到,请检查字符串表。如果它在字符串表中,则追溯使用该字符串资源的位置。

在动态命名和/或创建的情况下,您可能需要做更多的侦探工作。

使用这种方法可能发生的最糟糕的事情是按钮上的文本出现在整个项目中,或者按钮只有一个图标而没有文本。如果您真的很吃力,您可以使用 Spy++ 获取有关按钮的信息。您应该能够从中检索数字 ID,然后在 resource.h 中寻找它。

玩得开心!

关于c++ - 定位事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com