我想知道有什么技术可以在桌面应用程序上找到哪些代码实现了特定功能。
我是一名初级开发人员,仅具有围绕Web编程的专业编程经验。在Web中,这样做更容易。例如,您使用浏览器工具“检查”按钮,然后单击该按钮即可看到正在执行的操作。然后,假设您拥有完整的源代码,则可以深入了解调用的层次结构。
但是如何在桌面应用程序中做到这一点?至少不必深入研究完整的代码库?
我想知道有什么技术可以在桌面应用程序上找到哪些代码实现了特定功能。
我是一名初级开发人员,仅具有围绕Web编程的专业编程经验。在Web中,这样做更容易。例如,您使用浏览器工具“检查”按钮,然后单击该按钮即可看到正在执行的操作。然后,假设您拥有完整的源代码,则可以深入了解调用的层次结构。
但是如何在桌面应用程序中做到这一点?至少不必深入研究完整的代码库?
Answers:
追溯是将端点定位到与功能关联的事件(请参见下文)。到达那里后,将一个断点放置在调试器中。该功能会在调试器停止时触发。检查调用堆栈以追溯跟踪调用路径。在调用堆栈上移动时,您可以记下可变状态,或放置新的断点以再次检查事件。
该功能再次被触发,调试器在新的断点处停止。然后,您可以重复向后跟踪或执行向前跟踪,直到找到目标为止。
要调试功能,您必须知道在源代码中的最终目标。只有从这一点开始,您才能回溯以查看代码如何到达那里。一个例子; 了解如何执行撤消。您知道事情在代码中的何处被撤消,但是您不知道事情如何到达那里。这将是回溯以确定功能如何工作的候选者。
前向跟踪正在为与功能关联的事件定位起点(请参见下文)。到达该位置后,会将日志记录消息插入源代码或设置断点。随着您离起点的进一步发展,重复此过程,直到您发现该功能的目标。
您可以使用关键字,用户界面标识符(按钮ID,窗口名称),也可以轻松找到与该功能关联的事件侦听器。例如,您可以从用于触发撤消功能的按钮开始。
您可以将其视为与起点和终点位置相比的中间点。当您已经知道某个功能中使用了一段代码,但是您既不是功能的开始也不是结束时,则执行消除过程。
您从中间点走的方向取决于入口和出口的数量。如果在很多地方都使用了代码块,那么从该位置进行追溯将非常耗时,因为必须对它们全部进行检查。然后,您采用消除方法来减少此列表。或者,您可以从这一点开始执行前向跟踪,但是如果代码块分支到很多地方,这也是一个问题。
您必须通过不遵循明显不会对该功能执行的路径来减少位置方向。跳过此代码,仅在可能与功能相关的位置放置断点。
中点调试通常需要更高级的IDE功能。查看代码层次结构和依赖性的能力。没有这些工具,很难做到。
假设该功能与某个UI东西绑定在一起,例如Button或Menu,那么我倾向于这样做(非常乏味,但它可以工作)。这是在查看源代码,而不是使用调试器。
SUPER_BUTTON_3 = "Super Feature X3"
。供以后参考,请记住该文件名。正如@amon所指出的,有时调试器会更简单...
如果您根本找不到任何相关代码,则可以使用源代码控制软件向您显示添加了该代码的整个提交或附近的提交。那应该向您显示实现该功能所需的一切。
一种简单的查找起点的方法是在您的代码库中grep查找按钮上的文本。
通常,人们会在提交消息中放入来自问题跟踪器的问题ID。如果您发现描述功能请求的问题,则可以搜索具有该问题ID的提交。