我一直对葡萄酒感到惊讶.有时我想破解它,修复一些小东西并且通常理解它是如何工作的.所以,我下载了Wine源代码,之后我感到不堪重负.代码库是巨大的 - 与Linux内核不同 - 几乎没有关于代码的指南.
理解如此庞大的代码库的最佳实践是什么?
使用复杂的代码库,您可以犯的最大错误就是尝试成为一台计算机.让计算机运行代码,并使用调试器来帮助找出正在发生的事情.
了解如何从现有源代码编译,安装和运行您自己的Wine版本.
了解如何在您的Wine版本的运行实例上进行调试(例如使用gdb).
在调试器下运行Wine并使其演示不需要的行为.
有趣的部分:找到代码执行路径的去向,并开始学习它们如何组合在一起.
是的,阅读大量代码会有所帮助,但编译器/调试器/计算机可以比你更快地运行代码.
一位教授曾告诉我们将这种情况与爬山进行比较.你可能正在倾听那些做过这件事的人,并告诉你注意这个国家是什么样的.你毫不犹豫地相信这是一个壮观的景象.
但是,你必须开始攀爬自己才能真正理解顶部的视图是什么样的.
攀登一路并不是那么重要.只要达到地面以上的公平高度,这可能是完全足够的.
但是不要害怕开始攀爬.这种观点总是值得任何努力.
这一直是我的一个很好的比喻.我知道这个问题更多的是关于如何在你开始攀登后有效处理代码库的具体技巧.但是它立刻让我想起了我们的物理课程.
(这是我回过头来回答一个问题的答案.我修改了一下以适应这个问题.)
经验告诉我,在学习遗留系统时,您有三个主要目标:
了解代码应该做什么.
了解它是如何做到的.
(至关重要的是)了解它为什么以它的方式完成它们.
所有这三个部分都非常重要,有一些技巧可以帮助您入门.
首先,抵制诱惑,只需按住Ctrl键(或任何IDE使用的方式)绕过代码来理解所有内容.你可能无法以这种方式在脑海中保持一切,特别是当每一行强迫你查看多个其他类以了解它是什么时,所以你需要能够保持几个级别的堆叠在你的脑海里.
尽可能阅读文档; 它通常可以帮助您快速获得构建随后所有内容的心理框架.
尽可能运行测试用例.
不要害怕问一个知道你是否有问题的人.当然,你不应该浪费别人的时间进行无聊的查询,但是如果有些东西你根本就不理解(对于更多的概念性问题尤其如此,"将这个问题作为一个实现这个问题会更有意义吗? ___"或其他什么东西),在你搞砸了之前找不到答案并且不知道为什么.
当你最终开始阅读代码时,从逻辑"主"位置开始,然后从那里开始.不要只是从上到下,按字母顺序或任何东西阅读代码(这可能是显而易见的).
深入了解大型代码库的最佳方式是深入了解.许多项目都有一系列需要完成的简单任务,而且它们通常用于帮助人们轻松入门.您应该找到并处理其中的一些; 您将学习很多关于通用代码大纲和结构的知识,为项目做出贡献,并获得一个简单的回报,这将有助于鼓励您承担更大的任务.
像大多数项目一样,WINE为开发人员提供了很好的资源; IRC,维基,邮件列表和指南/概述.对于最令人生畏的代码库,在最初的几个修复之后它并不那么可怕.WINE真的很大,就像内核一样,我怀疑所有系统都有专家; 你不觉得自己也不需要.开始处理对你很重要的事情并从那里开始.
我自己开了几个补丁,这是一个很好的社区和良好的结构.有很多非常有用的调试消息,这是一个非常酷的项目,所以这可以帮助你更长时间地打击它.
我们都很感激你的勇气和愿意帮助WINE(它需要它).谢谢,祝你好运.