首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定位实现某一功能的源代码?

如何定位实现某一功能的源代码?
EN

Software Engineering用户
提问于 2014-03-08 22:44:09
回答 3查看 926关注 0票数 15

我想知道在桌面应用程序中,定位哪些代码实现了特定特性的一些技术。

我是一个初级的开发人员,只有专业的编程经验是围绕网络编程。在网络上,这样做更容易。例如,使用浏览器工具“检查”一个按钮,单击它时可以看到正在执行的操作。然后,假设您拥有完整的源代码,就可以向下钻取调用的层次结构。

但是如何在桌面应用程序中做到这一点呢?至少,不需要钻研完整的代码库?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2014-03-08 23:54:24

回溯

回溯跟踪是将端点定位到与该功能关联的事件(参见下面)。在那里之后,将在调试器中放置一个断点。此功能将在调试器停止时触发。对调用堆栈进行检查,以追溯调用路径。在遍历调用堆栈时,您可以记录变量状态,或者放置新的断点来再次检查事件。

该特性再次触发,调试器在新断点处停止。然后可以重复回溯或执行前向跟踪,直到找到目标为止。

Pros & Cons

  • 在调用堆栈上走来走去,看看你是如何到达某个地方的,总是更容易。
  • 在到达端点之前,可能有数以百万计的条件需要为真。如果您已经知道了端点,那么您已经为自己节省了大量的工作。
  • 如果特征被破坏了。您可能永远不会到达端点,而试图找出原因可能会浪费时间。

端点发现

要调试特性,您必须知道源代码的最终目标在哪里。只有从这一点出发,才能追溯到代码是如何实现的。一个示例;了解如何执行撤销。您知道代码中的内容被撤消了,但是您不知道事情是如何实现的。这将是一个候选的回溯,以了解该功能如何工作。

前向跟踪

前向跟踪是为与功能相关的事件定位起点(见下文)。在此之后,将日志消息插入到源代码中或设置断点。当您进一步远离起点时,会重复此过程,直到您发现该特性的目标。

Pros & Cons

  • 这是寻找特性的最简单的起点。
  • 代码复杂性降低了前向跟踪的有效性。代码中的条件越多,就越有可能走错方向。
  • 正向跟踪通常导致设置由不相关事件触发的断点。中断调试过程并干扰搜索。

起点发现

您可以使用关键字、用户界面标识符(按钮ID、窗口名称)或容易找到与该功能关联的事件侦听器。例如,您可以从用于触发撤消功能的按钮开始。

消除

工艺

与起点和终点相比,你可以认为这是中间点。当您已经知道一个特性中使用了一段代码时,您就执行了一个消除过程,但是它既不是特性的开始,也不是特性的结束。

中间点的方向取决于入口和出口的数量。如果代码块在许多地方使用,那么从这个位置返回跟踪可能非常耗时,因为它们都必须进行检查。然后,您使用一个消除过程来减少此列表。另外,您可以从这一点执行前向跟踪,但是如果代码块分支到许多地方,这也可能是一个问题。

您必须减少位置方向,不遵循显然不会为该功能执行的路径。跳过这段代码,只在可能与特性相关的地方放置断点。

中间点调试通常需要更先进的IDE特性。查看代码层次结构和依赖关系的能力。没有这些工具,就很难做到。

Pros & Cons

  • 当你想到这个特性时,中间点通常是你脑海中闪现出来的第一段代码。你对自己说:“啊,那得用XXXX来工作。”
  • 中间点可以显示最简单的起点。
  • 当同步或线程更改丢失时,中间点可能是获取功能跟踪的简单方法。
  • 中间点可以带您到您不熟悉的代码。花时间去了解到底发生了什么。
票数 22
EN

Software Engineering用户

发布于 2014-03-08 23:16:20

假设这个特性与某些UI细化相关联,比如按钮或菜单,那么我倾向于做的事情(非常乏味,但很有效)。这是在查看源代码,而不是使用调试器。

  1. 在按钮上搜索(希望是与众不同的)文本。“超级功能X3”。
  2. 这可能是在一个文件中有一些常量,例如SUPER_BUTTON_3 = "Super Feature X3"。为了将来参考,请记住这个文件名。
  3. 可能还有另一层(甚至两层)抽象,继续搜索以获得Button使用的“真实”字符串。请注意这是如何为未来做的。
  4. 现在搜索这个常数。希望你现在找到按钮了。也许这就是他们连接ActionListener的地方。(我在这里使用Java-ese,YMMV,但这个概念仍然有效)
  5. 如果有必要,在Button上搜索,您最终会找到它连接到侦听器的位置。
  6. 可能该侦听器实际上是根据常量重定向到其他侦听器(“真正的”功能),如果是的话,请遵循if / the或case语句。注意:如果有一个中央调度的事情,这是一个设置断点的好地方。
  7. 最后,您应该在实际代码中。

阿蒙指出,有时候调试器更简单..。

票数 12
EN

Software Engineering用户

发布于 2014-03-09 00:46:30

  • 如果您能够找到任何相关的代码,您可以使用源代码管理软件向您显示添加它的整个提交或附近提交。这将向您展示实现该功能所需的一切。
  • 一个简单的方法可以找到一些起点来看,是通过你的代码库寻找按钮上的文本的grep。
  • 通常,人们会将问题id从他们的问题跟踪器在他们的提交消息。如果可以找到描述特性请求的问题,则可以使用该问题id搜索提交。
票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/231759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档