2011-09-09 167 views
21

我剛剛檢查了鉻的來源,但我迫切需要學習如何瀏覽這個怪物。尋找鉻的源代碼

我將如何搜索實現我感興趣的行爲/功能的代碼部分?

比方說,我想看看一個URL輸入到地址欄後會發生什麼。我如何找到這段代碼?

或者,我想看看在解析HTML,當達到一定的標記時,會發生什麼。

我在我面前有大量的源代碼,並且沒有在其周圍導航的技能。我如何學習這項技能?

+5

作爲一個起點,請閱讀http://www.chromium.org/developers/how-tos/getting-around-the-chrome-source-code - 這應該能讓您更好地瞭解您所看到的內容在那個怪異的src /目錄中。 (我真的不認爲這會是一個很好的_answer_,因爲它只是一個提示..) – maligree

+3

也準備好了[你如何找到一個新的代碼庫](http://stackoverflow.com/問題/ 70124 /如何找到你的方式 - 一個新的代碼庫) – Justin

+1

grep是你的朋友。或找到主要和痕跡。瀏覽大型代碼庫不是微不足道的。 – Chris

回答

11

我對那種在潛水的建議是看看的源http://code.google.com/p/chromiumembedded/

這有點鉻的濃縮版,如果你看看文件它專門使用,無論是包含在它的源代碼樹的,或者其中包含從鉻回購文件在逃。 Chromium代碼庫是大量的東西,其中大部分實際上並不在瀏覽器中。有很多來自第三方回購的代碼,然後在構建過程中被淘汰,或者Chromium的實現位於樹的其他地方,還有很多副項目(雖然有趣並且是一個很棒的資源,東西)將阻止您實現特定的瀏覽器實現的目標,以及如何融合在一起。

CEF是偉大的,因爲你可以看到有人誰的已經做了拉動所有的東西,共同打造一個項目,在瀏覽器中查看,並沒有其他特別很作用域的過程。您可以很容易地看到哪些部分主要來源於webkit,您可以看到Google的實施中出現了哪些交叉點,並且您可以很輕鬆地看到V8如何進入混合。

我說「容易」相對而言,因爲我們還在討論一個巨大的代碼量整體。 CEF會讓你置身於需求的中心,但這些東西仍然從樹的其他部分吸收大量各種各樣的東西。編譯它需要花費大約一個小時的時間在一臺配備12個RAM和8個內核的非常棒的計算機上,生成的文件佔用6-10個小時。

最起碼,還有的不會是任何類型的快速跳轉到淺水區到這裏或那裏撿東西零碎。瀏覽器是必不可少的複雜工程,因爲它們必須包含如此大量的單個功能,然後將它們組合到共享的上下文中。你可能會發現你正在尋找的一件事,但是你會發現它是一個類庫的一部分,它可能由幾十或幾百個文件組成,而這些文件又依靠另外一百個這樣的庫來處理每個任務,所以要真正拿走一些東西,你必須花時間承擔超過任何給定的信息。

編輯:哦也作爲你的具體例子。

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

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

的「Chrome」樹在很大程度上包含了直接實現(很多東西是不是在那裏,雖然,大部分甚至,但這是起點點)。這與ChromeOS的重疊(ChromeOS的是實物拍攝到了瘋狂的極端鉻瀏覽器)

/鉻/瀏覽器http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/

是讓你接近,你想要的。你開始看到你可以匹配到瀏覽器的特定參考,比如標籤和whatnot(忽略了實際瀏覽器實現本身的巨大象徵,它佔據了所有這些東西的大部分頭腦空間)

/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」和本地小部件,這是實際事件處理代碼的大部分,如果我沒有記錯的話。

+0

謝謝。您。認真的,很好的答案 - 非常感謝。這與我從閱讀malign在他的評論中指出的文檔中學到的東西聽起來像是一次爆炸一樣。 – ntl0ve

+0

這是艱難的戰鬥知識。 Google不會推廣在網絡相關開發環境中常見的那種平易近人的環境。最近在谷歌工程師的一篇文章(意外公佈)中對此進行了評論。 Chrome的工程質量在他們的大部分工作中都非常出色。從本質上講,它的代碼質量足夠高,所以他們期望在其上工作的人可以在沒有太多文檔的情況下有效地使用它。重點在於他們的目標受衆不是需要學習的人。這是他們公司文化文化的一部分 – 2011-10-27 10:41:57

+0

以及對接近代碼的人具有非常非常高的基準期望的功能。但它確實意味着有大量令人難以置信的高質量開源代碼,就像暗物質一樣。它在那裏,但沒有高水平的專業知識或很多時間來通過它冒泡,所以只有少數能夠在很少的初始方向傾注時間的人受益。 – 2011-10-27 10:42:50

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