एक हैकर की कहानी
दिनांक 12/02/10 है। क्रिसमस से पहले के दिन टपक रहे हैं और मैंने विंडोज़ प्रोग्रामर के रूप में एक प्रमुख रोड ब्लॉक को बहुत हिट किया है। मैं AQTime का उपयोग कर रहा हूं, मैंने नींद, चमकदार और बहुत नींद की कोशिश की है, और जैसा कि हम बोलते हैं, VTune स्थापित है। मैंने VS2008 प्रोफाइलर का उपयोग करने की कोशिश की है, और यह सकारात्मक और साथ ही अक्सर असंवेदनशील है। मैंने यादृच्छिक ठहराव तकनीक का उपयोग किया है। मैंने कॉल-ट्री की जांच की है। मैं समारोह निशान निकाल दिया है। लेकिन इस मामले का सबसे दुखद तथ्य यह है कि मैं जिस ऐप के साथ काम कर रहा हूं, वह कोड की एक लाख लाइनों से अधिक है, शायद तीसरे पक्ष के ऐप्स के लायक एक और लाख लाइनें हैं।
मुझे बेहतर उपकरण चाहिए। मैंने अन्य विषयों को पढ़ा है। मैंने प्रत्येक विषय में सूचीबद्ध प्रत्येक प्रोफाइलर की कोशिश की है। वहाँ बस इन भद्दे और महंगे विकल्पों की तुलना में कुछ बेहतर होना चाहिए, या लगभग कोई लाभ नहीं के लिए काम की तेज मात्रा। अधिक जटिल मामलों के लिए, हमारे कोड को भारी रूप से पिरोया गया है, और कई क्यूटी इवेंट लूप चलाता है, जिनमें से कुछ इतने नाजुक होते हैं कि वे समय की देरी के कारण भारी इंस्ट्रूमेंटेशन के तहत दुर्घटनाग्रस्त हो जाते हैं। मुझसे मत पूछो कि हम कई ईवेंट लूप क्यों चला रहे हैं। कोई मुझे बता नहीं सकता।
क्या विंडोज़ के माहौल में वैलग्राइंड की तर्ज पर कोई विकल्प है?
क्या मेरे द्वारा पहले ही आजमाए गए टूटे औजारों के लंबे स्वाथ से बेहतर कुछ है?
क्या क्यूटी के साथ एकीकृत करने के लिए कुछ भी बनाया गया है, शायद कतार में घटनाओं के एक उपयोगी प्रदर्शन के साथ?
मेरे द्वारा आजमाए गए औजारों की एक पूरी सूची, जो वास्तव में इटैलिक में उपयोगी थे:
- AQTime: अच्छा! गहरी पुनरावृत्ति के साथ कुछ परेशानी है, लेकिन इन मामलों में कॉल ग्राफ़ सही है, और आपके किसी भी भ्रम को दूर करने के लिए इस्तेमाल किया जा सकता है। एक आदर्श उपकरण नहीं है, लेकिन बाहर की कोशिश करने के लायक है। यह आपकी आवश्यकताओं के अनुरूप हो सकता है, और यह निश्चित रूप से मेरे लिए सबसे अच्छा था।
- डिबग मोड में रैंडम पॉज अटैक: समय की पर्याप्त जानकारी नहीं।
एक अच्छा उपकरण लेकिन संपूर्ण समाधान नहीं। - समानांतर स्टूडियो: परमाणु विकल्प। आज्ञाकारी, अजीब और पागलपन से शक्तिशाली। मुझे लगता है कि आपको 30 दिन के मूल्यांकन को हिट करना चाहिए, और यह पता लगाना चाहिए कि क्या यह एक अच्छा फिट है। यह बहुत ही शांत है।
- एएमडी कोडीनैलिस्ट: अद्भुत, उपयोग करने में आसान, बहुत क्रैश-प्रोन, लेकिन मुझे लगता है कि यह एक पर्यावरण की बात है। मैं इसे आज़माने की सलाह दूंगा, क्योंकि यह मुफ़्त है।
- ल्यूक स्टैकवॉकर: छोटी परियोजनाओं पर काम करता है, यह हमारे लिए काम करने की कोशिश कर रहा है। कुछ अच्छे परिणाम हालांकि, और यह निश्चित रूप से मेरे व्यक्तिगत कार्यों के लिए स्लीप को बदल देता है।
- PurifyPlus: Win-x64 वातावरण के लिए कोई समर्थन नहीं, सबसे प्रमुख विंडोज 7. अन्यथा उत्कृष्ट। अन्य विभागों में मेरे कई सहयोगियों ने इसकी शपथ ली।
- VS2008 प्रोफाइलर: आवश्यक रिज़ॉल्यूशन में फ़ंक्शन ट्रेस मोड में 100 + गिग्स रेंज में आउटपुट का उत्पादन करता है। प्लस साइड पर, ठोस परिणाम पैदा करता है।
- GProf: GCC को और भी प्रभावी रूप से प्रभावी बनाने की आवश्यकता है।
- VTune: VTune के W7 अपराधी पर सीमाओं का समर्थन करते हैं। अन्यथा उत्कृष्ट
- पिन: मुझे अपना टूल हैक करना होगा, इसलिए यह एक अंतिम उपाय है।
- स्लीपी \ वैलीसेपी: छोटे ऐप्स के लिए उपयोगी है, लेकिन मुझे यहाँ फेल कर रहा है।
- ईज़ीप्रोफाइलर: बुरा नहीं है अगर आपको थोड़ा सा भी बुरा न लगे तो कोड को बताएं कि उपकरण कहां है।
- Valgrind: * केवल निक्स, लेकिन बहुत अच्छा है जब आप उस वातावरण में हैं।
- OProfile: केवल Linux।
- Proffy: वे जंगली घोड़ों को गोली मारते हैं।
सुझाए गए उपकरण जिन्हें मैंने आज़माया नहीं है:
- XPerf:
- Glowcode:
- Devpartner:
नोट: इस समय इंटेल वातावरण। VS2008, पुस्तकालयों को बढ़ावा दें। Qt 4+। और उन सभी के मनहूस अपमान: ट्रोलटेक के माध्यम से क्यूटी / एमएफसी एकीकरण।
अब: लगभग दो सप्ताह बाद, ऐसा लगता है कि मेरा मुद्दा हल हो गया है। विभिन्न उपकरणों के लिए धन्यवाद, सूची में लगभग सब कुछ और मेरी व्यक्तिगत चाल की एक जोड़ी सहित, हमने प्राथमिक बाधाओं को पाया। हालांकि, मैं नए प्रोफाइल के साथ-साथ नए प्रोफाइल का परीक्षण, खोज और परीक्षण करने जा रहा हूं। क्यों? क्योंकि मैं तुम लोगों पर एहसान करता हूँ, क्योंकि तुम लोग पत्थर मारते हो। यह समय को थोड़ा धीमा कर देता है, लेकिन मैं अभी भी बहुत उत्साहित हूं कि नए उपकरणों को आजमाता रहूं।
सिनॉप्सिस
कई अन्य समस्याओं के बीच, कई घटकों को हाल ही में गलत थ्रेडिंग मॉडल में बदल दिया गया था, जिससे इस तथ्य के कारण गंभीर हैंग हो गया था कि हमारे नीचे कोड अचानक बहुआयामी नहीं रह गया था। मैं अधिक नहीं कह सकता क्योंकि यह मेरे एनडीए का उल्लंघन करता है, लेकिन मैं आपको बता सकता हूं कि यह कभी आकस्मिक निरीक्षण या सामान्य परीक्षण समीक्षा के द्वारा भी नहीं मिला। प्रोफाइलर्स, कॉलगर्ल्स और यादृच्छिक संयोजन के बिना, हम अभी भी आकाश के सुंदर नीले चाप पर अपने रोष को चिल्लाएंगे। शुक्र है, मैं कुछ बेहतरीन हैकर्स के साथ काम करता हूं, जिनसे मैं कभी मिला हूं, और मेरे पास एक अद्भुत 'बेहतरीन उपकरण और महान लोगों की कविता है।
जेंटलफोक, मैं इसकी जबरदस्त सराहना करता हूं, और केवल इस बात का अफसोस है कि मेरे पास आप में से प्रत्येक को इनाम देने के लिए पर्याप्त प्रतिनिधि नहीं है। मुझे अभी भी लगता है कि यह एसओ पर अब तक के लोगों की तुलना में बेहतर जवाब पाने के लिए एक महत्वपूर्ण सवाल है।
नतीजतन, अगले तीन हफ्तों के लिए प्रत्येक सप्ताह, मैं सबसे बड़ा इनाम रख सकता हूं, जो मैं सबसे अच्छे उपकरण के साथ इसका जवाब दे सकता हूं जो मुझे लगता है कि सामान्य ज्ञान नहीं है। तीन हफ्तों के बाद, हम उम्मीद करेंगे कि प्रोफाइलर्स की एक निश्चित प्रोफ़ाइल जमा हो गई है, अगर आप मेरी चालाकी को क्षमा कर देंगे।
लो-दूर
एक प्रोफाइलर का उपयोग करें। वे रिची, कर्निघन, बेंटले और नथ के लिए काफी अच्छे हैं। मुझे परवाह नहीं है कि आपको क्या लगता है कि आप कौन हैं। एक प्रोफाइलर का उपयोग करें। अगर आपको जो मिला है वह काम नहीं करता है, तो दूसरा ढूंढें। यदि आपको एक नहीं मिल रहा है, तो कोड एक। यदि आप एक कोड नहीं कर सकते हैं, या यह एक छोटा हैंग अप है, या आप बस अटक गए हैं, तो यादृच्छिक ठहराव का उपयोग करें। यदि अन्य सभी विफल हो जाते हैं, तो एक प्रोफाइलर को धमाका करने के लिए कुछ ग्रेड छात्रों को किराए पर लें।
एक लंबा दृश्य
इसलिए, मुझे लगा कि थोड़ा पूर्वव्यापी लेखन करना अच्छा होगा। मैंने समानांतर स्टूडियो के साथ बड़े पैमाने पर काम करने का विकल्प चुना, क्योंकि यह वास्तव में पिन टूल के शीर्ष पर बनाया गया है। कुछ शोधकर्ताओं के साथ अकादमिक व्यवहार करने के बाद, मुझे लगा कि यह शायद कुछ गुणवत्ता का एक निशान था। शुक्र है, मैं सही था। जबकि जीयूआई थोड़ा भयानक है, मैंने आईपीएस को अविश्वसनीय रूप से उपयोगी पाया, हालांकि मैं आराम से सभी के लिए इसकी सिफारिश नहीं कर सकता। गंभीर रूप से, लाइन-स्तर हिट काउंट प्राप्त करने का कोई स्पष्ट तरीका नहीं है, ऐसा कुछ जो AQT और कई अन्य प्रोफाइल प्रदान करता है, और मैंने अन्य चीजों के बीच शाखा-चयन की दर की जांच के लिए बहुत उपयोगी पाया है। नेट में, मैंने AQTime का भी उपयोग करने का आनंद लिया है, और मैंने उनका समर्थन वास्तव में उत्तरदायी पाया है। फिर से, मुझे अपनी सिफारिश योग्य करनी होगी: उनकी बहुत सी सुविधाएँ अच्छी तरह से काम नहीं करती हैं, और उनमें से कुछ Win7x64 पर एकदम दुर्घटनाग्रस्त हैं। XPerf ने भी admirably का प्रदर्शन किया, लेकिन कुछ प्रकार के अनुप्रयोगों पर अच्छे रीड प्राप्त करने के लिए आवश्यक नमूना विवरण के लिए आश्चर्यजनक रूप से धीमा है।
अभी, मुझे यह कहना होगा कि मुझे नहीं लगता कि W7x64 परिवेश में C ++ कोड की रूपरेखा के लिए कोई निश्चित विकल्प है, लेकिन निश्चित रूप से ऐसे विकल्प हैं जो किसी भी उपयोगी सेवा को करने में विफल हैं।