The Chromium Chronicle #7: प्रीप्रोसेसिंग सोर्स

एपिसोड 7: सिएटल, वॉशिंगटन में ब्रूस डॉसन का (अक्टूबर, 2019)
पिछले एपिसोड

कभी-कभी एक Chromium सोर्स फ़ाइल को खुद से कंपाइल करना मददगार होता है. जैसे, कंपाइलर ऑप्टिमाइज़ेशन विकल्पों के साथ प्रयोग करना, उसे एक ही फ़ाइल में प्री-प्रोसेस करना, ताकि कुछ छोटे-छोटे मैक्रो की जानकारी को समझा जा सके या कंपाइलर बग को कम किया जा सके.

कुछ तरकीबें अपनाकर, Chromium डेवलपर उस कमांड को ढूंढकर उसे लागू कर पाएंगे जो किसी खास सोर्स फ़ाइल को कंपाइल करती है. इस कमांड को ज़रूरत के मुताबिक बदलाव करके लागू किया जा सकता है.

^ सफ़िक्स का इस्तेमाल करके रुचि की फ़ाइल कंपाइल करें. इसके लिए, अपनी आउटपुट डायरेक्ट्री पर जाएं और ऑटोनिंजा (या निंजा) का इस्तेमाल करें. यह सफ़िक्स निंजा को इस मामले में बताए गए file—version.o का आउटपुट बनाने के लिए कहता है. इसके बाद, फ़ाइल को छुएं और निंजा के लिए उसे (सिर्फ़ यही) -v फ़्लैग के साथ फिर से कंपाइल करें:

Linux या Nexus पर:

autoninja ../../base/version.cc^
touch ../../base/version.cc
autoninja -v ../../base/version.cc^

Windows cmd शेल में ^ एक विशेष वर्ण है और इसे एस्केप किया जाना चाहिए:

C:\> autoninja ../../base/version.cc^^
C:\> touch ../../base/version.cc
C:\> autoninja -v ../../base/version.cc^^

autoninja -v कमांड का सामान्य आउटपुट ऐसा दिखता है (काट-छांट की गई):

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...

इस निर्देश से, अपनी पसंद की फ़ाइल को कंपाइल किया जा सकता है. पहले से प्रोसेस किया गया आउटपुट पाने के लिए, यह तरीका अपनाएं:

Linux या Nexus पर, -o obj/base/base/version.o के ब्लॉक को आखिर से हटाएं और -E जोड़ें. यह कंपाइलर को बताता है कि प्रीप्रोसेस की गई फ़ाइल को stdout पर प्रिंट किया जाए.

आउटपुट को किसी फ़ाइल पर रीडायरेक्ट करें, जैसे:

../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i

Windows पर, /showIncludes विकल्प को शुरुआत से हटा दें. यह हर #include के लिए आउटपुट की एक लाइन प्रिंट करता है. इसके बाद, /P जोड़कर, फ़ाइल को कंपाइल करने के बजाय उसे पहले से प्रोसेस किया जा सकता है. नतीजे मौजूदा डायरेक्ट्री में version.i में सेव होंगे:

..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P

अब आप पहले से प्रोसेस की गई फ़ाइल की जांच करके यह देख सकते हैं कि मैक्रो असल में क्या कर रहे हैं. इसके अलावा, प्रयोग के तौर पर कंपाइलर-स्विच किए गए बदलाव किए जा सकते हैं और उन्हें फिर से कंपाइल करके देखा जा सकता है कि क्या होता है.

जानकारी पाने के दूसरे तरीके

  • तेज़ Chrome बिल्ड: बिल्ड को ऑप्टिमाइज़ करने के ज़्यादा सुझाव पाने के लिए (Windows पर फ़ोकस करने वाला).
  • ETW: ETW (इसे Xperf भी कहा जाता है) दस्तावेज़ों को पढ़कर, Chrome में या बिल्ड में Windows की परफ़ॉर्मेंस से जुड़ी समस्याओं का पता लगाने का तरीका जानें.