我是刚刚开始工作的新鲜大学毕业生。在我的加速阶段,我需要学习很多产品代码。有一些设计文档,但他们没有多大帮助。你如何理解大量的代码?
您能否提供一些通用技术来浏览和理解巨大的产品代码(特别是C++)?
我是刚刚开始工作的新鲜大学毕业生。在我的加速阶段,我需要学习很多产品代码。有一些设计文档,但他们没有多大帮助。你如何理解大量的代码?
您能否提供一些通用技术来浏览和理解巨大的产品代码(特别是C++)?
运行它通过doxygen。这将生成html文档,即使代码没有适当的doxygen样式注释,这些文档也会很有帮助。
另一个好的建议是查看单元测试,如果有的话。如果没有单元测试,理解代码的一个好方法是编写你自己的单元测试。努力做到这一点将会为自己付出很多代价。
利用一切提供给你的方法(没有特别的优先级):
最重要的是:顽强和执着。如果你没有投入工作,不要指望理解它。如果你不明白的东西,挖掘和挖掘,直到你做。软件并不神奇,它只是辛勤工作:)
不错的名单。不过,我认为你的确按优先顺序排列。大部分时间在大型旧项目上,任何文档都毫无价值。 – 2010-08-27 22:29:35
我会补充说,如果你在步骤(5)上工作,与团队分享你的图表。大多数团队(包括我的)欢迎贡献。您的努力可以帮助补充已经缺乏的文档集。 – 2010-08-27 22:47:03
这显然是一个很常见的问题,它类似于(与它和问题)这一个:通过一些那些How to understand the design and code flow of any product quickly?
挖回答/评论,为初学者。否则,我们最终会重复它们。 :)
有些人会告诉你从数据结构开始,但是在一个大的系统中,即使这在大多数情况下都不是非常有用。我可以想到四点:
花点时间。通常情况下,它更像是一系列的格式转换,而不是单一的,线性的,渐进的理解。所以要耐心等待。
不管它有多大,你都应该能够在调试器中放置一个断点并将它放在一个调试器中。即使在一个庞大而复杂的多线程系统中,您也应该能够通过并了解发生了什么。
寻求错误,并开始修复它们,无论它们看起来有多疯狂。这就好比把自己放到外国去了。你会最终拾起语言。
寻找导师。丛林指南是无价的。
+1:修复错误是学习代码库的强大功能。除非错误是微不足道的,否则你必须学习一些代码才能修复它。 – 2010-08-27 22:41:09
如果我负责学习任何新软件,则通常会要求我修复这些错误。这样,你不仅了解它在做什么,而且如何(有时甚至比你的同事更好,如果他们不能找出错误)。 – 2010-08-28 01:35:23
我认为已经有一些很好的回应。我的2c值得...
不知道你的课程很大(10 KLOC,1000 KLOC,10000 KLOC等),但有人会希望这是以某种方式分解,而不是一个单一的单一程序。也许你的管理层对目前你最可能花费时间的'模块'有一些指导。希望这可以帮助打破问题范围。
首先,在尝试了解代码之前,尝试了解产品。它有什么作用?那它是如何做到的?它与什么互动?那它是如何相互作用的?等等...
在到达代码时,首先要了解高层次的设计和理念,并在深度之前在广度上工作。我同意上面的一些重新修复一些错误,但是我也强烈建议你即使需要深入了解细节以修复一些错误,仍然可以继续处理高层次的问题。
如果您找不到任何已存在的图表,我也同意上面的说明为自己生成一些图表。然后分享他们,也许是一个团队/产品维基?我很好奇为什么现有的doco没有太大的帮助。通常这是因为这种类型的doco是从早期的概念中产生的,并且产品不再有任何相似性,但是如果情况并非如此,那么您可以为这个问题做出贡献。一个人假设你今天在哪里,其他人的时间就会足够短,并且你处于一个理想的位置,知道什么是必不可少的doco!
如果产品实际上是“巨大”的,那么你必须接受你永远无法把它全部放在你的脑海中,所以你能做的最好的事情是足够熟悉,知道从哪里开始寻找(回到理解产品,并首先接近代码宽度)。
重复:http://stackoverflow.com/questions/2783612/listing-c-c-functions-code-analysis-in-unix/2783652#2783652 – 2010-08-27 22:28:20
社区wiki? – Anon 2010-08-27 22:33:04
@gbrandt该链接是关于如何获取列出C/C++函数的方法。这当然不是一个重复。 – OTZ 2010-08-27 22:33:25