找到了铬的源代码

时间:2011-09-09 13:02:47

标签: google-chrome chromium

我刚检查了铬的来源,但我迫切需要学习如何绕过这个怪物。

我如何搜索实现我感兴趣的行为/功能的部分代码?

假设我想看看将URL输入地址栏后会发生什么。我如何找到这段代码?

或者,我希望看到在解析HTML时会遇到某个标记会发生什么。

我面前有大量的源代码,没有导航技巧。我该如何学习这项技能?

2 个答案:

答案 0 :(得分:11)

我对潜水的建议是看一下http://code.google.com/p/chromiumembedded/的来源。

这是Chrome的精简版本,如果您查看它专门使用的文件,可以是源代码树中包含的文件,也可以是Chromium repo中包含的文件。 Chromium代码库是一个庞大的东西,其中大部分实际上并不在浏览器中。从第三方回购中获取大量代码,然后在构建过程中将其归结为或者Chromium的实现位于树中的其他位置,有很多副项目(虽然有趣且广泛的资源范围很广泛)这些东西会阻止你实现你在浏览器实现上特别磨练的目标以及它们如何组合在一起。

CEF很棒,因为你可以看到一个人已经完成了把所有这些东西放在一起构建一个非常专门用于浏览器视图的项目的过程。你可以很容易地看到哪些部分主要来自webkit,你可以看到谷歌实现中交叉的位置,你可以很容易地看到V8如何被混合到一起。

我之所以说“相对而言”很容易,因为我们仍然在谈论大量的代码。 CEF会让你处于要求的中心位置,但这些东西仍然会从树的其他部分中吸取大量的东西。编译它需要一个小时在一台非常好的计算机上,有12个ram和8个内核,生成的文件占用6-10 gigs。

至少,不会有任何类型的快速跳入浅层来挑选这里或那里零碎的东西。浏览器必然是非常复杂的工程,因为它们必须包含如此大量的单独功能,然后将它们组合成一个共享的上下文。您可能会发现您正在寻找的一件事,但您会发现它是类库的一部分,可能由数十个或数百个文件组成,而这些文件又依赖于这些库中的一百多个来处理每个任务所以要真正拿走一些东西,你必须花时间去接受比任何给定信息更多的东西。

编辑:哦也作为你的具体例子。

src是root http://src.chromium.org/viewvc/chrome/trunk/src

/ chrome http://src.chromium.org/viewvc/chrome/trunk/src/chrome

“chrome”树主要包含直接实现(虽然很多东西不在那里,但大部分都是,但这是起点)。这与chromeos重叠(chromeos是一种疯狂极端的铬浏览器)

/ chrome / browser http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/

让你接近你想去的地方。你开始看到你可以与浏览器匹配的特定引用,比如标签和诸如此类的东西(忽略了实际浏览器实现本身的巨大大象,它占据了所有这些东西的大部分思维空间)

/ chrome / browser / ui http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/

将您带到浏览器的大多数ui代码所在的位置。当有交叉或者东西迁移时,它可能会让人感到困惑,就像在根src目录中有一个“ui”有一些交叉。

最后http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/ui/omnibox/

其中包含的代码数量惊人。但这是你发现的很多东西。这里的代码是在其他地方构建的许多类的实现。对于非webview gui组件,你会发现它们主要指向根“ui”以及那里的本机小部件,如果我没记错的话,那就是大部分实际事件处理代码。

答案 1 :(得分:1)

你可以试试这个......它实际上也可能在某个地方引领: - )

http://aaronboodman-com-v1.blogspot.com/2010/10/wherein-i-help-you-get-good-job.html

通过开发论坛阅读也可能有所帮助......

http://groups.google.com/a/chromium.org/group/chromium-dev/topics

此外,本节还有很多有用的文档,例如样式指南等。

http://dev.chromium.org/developers/contributing-code

最后但并非最不重要的是,IRC是你的朋友......

http://dev.chromium.org/developers/irc