เรื่องของแฮกเกอร์
วันที่คือ 12/02/10 หลายวันก่อนวันคริสต์มาสกำลังจะหายไปและฉันก็โดนบล็อกถนนสายสำคัญในฐานะโปรแกรมเมอร์หน้าต่าง ฉันใช้ AQTime ฉันพยายามง่วงนอนเป็นประกายและง่วงนอนมากและเมื่อเราพูด VTune กำลังติดตั้ง ฉันได้ลองใช้ตัวสร้างโปรไฟล์ VS2008 และมันก็ถูกลงโทษในทางบวกเช่นกัน ฉันใช้เทคนิคการหยุดชั่วคราวแบบสุ่ม ฉันตรวจสอบต้นไม้ต้นสาย ฉันไล่ออกจากฟังก์ชั่นการติดตาม แต่ข้อเท็จจริงที่เจ็บปวดอันน่าเศร้าของเรื่องนี้ก็คือแอปที่ฉันใช้งานอยู่นั้นมีโค้ดมากกว่าหนึ่งล้านบรรทัดโดยอาจมีแอพของบุคคลที่สามอีกกว่าล้านบรรทัด
ฉันต้องการเครื่องมือที่ดีกว่า ฉันอ่านหัวข้ออื่นแล้ว ฉันลองแต่ละโปรไฟล์ที่ระบุไว้ในแต่ละหัวข้อ จะต้องมีสิ่งที่ดีกว่าตัวเลือกขยะและราคาแพงเหล่านี้หรือจำนวนงานที่น่าหัวเราะจนแทบไม่มีกำไร เพื่อให้เกิดความซับซ้อนยิ่งขึ้นรหัสของเรามีการใช้เธรดอย่างหนักและเรียกใช้ลูป Qt Event จำนวนหนึ่งซึ่งบางส่วนมีความเปราะบางจนเกิดความผิดพลาดภายใต้เครื่องมือหนักเนื่องจากความล่าช้าของเวลา อย่าถามฉันว่าเหตุใดเราจึงเรียกใช้ลูปหลายเหตุการณ์ ไม่มีใครสามารถบอกได้
มีตัวเลือกเพิ่มเติมตามแนวของ Valgrind ในสภาพแวดล้อมของ windows หรือไม่?
มีอะไรดีไปกว่าเครื่องมือที่ชำรุดอันยาวเหยียดที่ฉันได้ลองไปแล้วหรือไม่?
มีอะไรที่ออกแบบมาเพื่อรวมเข้ากับ Qt หรืออาจจะมีการแสดงกิจกรรมที่เป็นประโยชน์ในคิว?
รายการทั้งหมดของเครื่องมือที่ฉันลองด้วยเครื่องมือที่มีประโยชน์จริง ๆ ในตัวเอียง:
- AQTime:ค่อนข้างดี! มีปัญหากับการเรียกซ้ำแบบลึก แต่กราฟการโทรนั้นถูกต้องในกรณีเหล่านี้และสามารถใช้เพื่อกำจัดความสับสนที่คุณอาจมี ไม่ใช่เครื่องมือที่สมบูรณ์แบบ แต่ควรลองใช้ดู มันอาจเหมาะกับความต้องการของคุณและมันก็ดีพอสำหรับฉันเกือบตลอดเวลา
- หยุดการโจมตีแบบสุ่มชั่วคราวในโหมดดีบั๊ก:มีข้อมูลไม่เพียงพอ
เครื่องมือที่ดี แต่ไม่ใช่โซลูชันที่สมบูรณ์ - Parallel Studios: ตัวเลือกนิวเคลียร์ เสือกแปลกและทรงพลังอย่างบ้าคลั่ง ฉันคิดว่าคุณควรประเมินผล 30 วันและคิดออกว่าเหมาะสมหรือไม่ มันก็เจ๋งเกินไปเช่นกัน
- AMD Codeanalyst: ยอดเยี่ยมใช้งานง่ายล้มเหลวได้ง่ายมาก แต่ฉันคิดว่านั่นเป็นสิ่งที่อยู่ในสภาพแวดล้อม ฉันขอแนะนำให้ลองเพราะฟรี
- Luke Stackwalker:ทำงานได้ดีในโครงการขนาดเล็กมันเป็นบิตพยายามทำให้มันทำงานกับเรา บางผลลัพธ์ที่ดีและแน่นอนแทนที่ Sleepy สำหรับงานส่วนตัวของฉัน
- PurifyPlus:ไม่รองรับสภาพแวดล้อม Win-x64 ซึ่งเป็น Windows 7 ที่เด่นชัดที่สุด เพื่อนร่วมงานของฉันจำนวนหนึ่งในแผนกอื่น ๆ ต่างก็สาบานต่อเรื่องนี้
- VS2008 Profiler: สร้างเอาต์พุตในช่วง 100 + gigs ในโหมดติดตามการทำงานที่ความละเอียดที่ต้องการ ด้านบวกให้ผลลัพธ์ที่มั่นคง
- GProf: ต้องการ GCC ให้มีประสิทธิภาพปานกลาง
- VTune: W7 ของ VTune สนับสนุนพรมแดนทางอาญา ยอดเยี่ยมเป็นอย่างอื่น
- PIN: ฉันต้องแฮ็คเครื่องมือของตัวเองดังนั้นนี่เป็นวิธีสุดท้าย
- ง่วงนอน \ VerySleepy: มีประโยชน์สำหรับแอปขนาดเล็ก แต่ทำให้ฉันล้มเหลวที่นี่
- EasyProfiler: ไม่เลวเลยถ้าคุณไม่สนใจรหัสที่ถูกฉีดด้วยตัวเองเล็กน้อยเพื่อระบุตำแหน่งของเครื่องดนตรี
- Valgrind: * ระวังเท่านั้น แต่ดีมากเมื่อคุณอยู่ในสภาพแวดล้อมนั้น
- OProfile: Linux เท่านั้น
- Proffy: พวกเขายิงม้าป่า
เครื่องมือแนะนำที่ฉันไม่ได้ลอง:
- Xperf:
- Glowcode:
- DevPartner:
หมายเหตุ: สภาพแวดล้อมของ Intel ในขณะนี้ VS2008 เร่งห้องสมุด Qt 4+ และผู้สร้างเสียงอึกทึกของพวกเขาทั้งหมด: การรวม Qt / MFC ผ่าน trolltech
ตอนนี้:เกือบสองสัปดาห์ต่อมาดูเหมือนว่าปัญหาของฉันจะได้รับการแก้ไข ขอบคุณเครื่องมือที่หลากหลายรวมถึงเกือบทุกอย่างในรายการและกลเม็ดส่วนตัวของฉันทำให้เราพบคอขวดหลัก อย่างไรก็ตามฉันจะทำการทดสอบสำรวจและทดลองใช้โปรไฟล์ใหม่รวมถึงเทคโนโลยีใหม่ ๆ ทำไม? เพราะฉันเป็นหนี้พวกคุณเพราะพวกคุณร็อค มันทำให้ไทม์ไลน์ช้าลงเล็กน้อย แต่ฉันก็ยังรู้สึกตื่นเต้นมากที่ได้ลองใช้เครื่องมือใหม่ ๆ
บทสรุป
ท่ามกลางปัญหาอื่น ๆ จำนวนของส่วนประกอบได้ถูกสลับไปยังแบบจำลองเธรดที่ไม่ถูกต้องทำให้เกิดการวางสายที่ร้ายแรงเนื่องจากความจริงที่ว่ารหัสที่อยู่ภายใต้เรานั้นไม่ได้ถูกมัลติเธรดอีกต่อไป ฉันไม่สามารถพูดได้มากกว่านี้เพราะมันเป็นการละเมิด NDA ของฉัน แต่ฉันสามารถบอกคุณได้ว่าสิ่งนี้จะไม่ถูกค้นพบโดยการตรวจสอบทั่วไปหรือแม้แต่จากการตรวจสอบรหัสปกติ หากไม่มีโปรไฟล์ผู้โทรเข้าและการหยุดเล่นแบบสุ่มร่วมกันเราจะยังคงส่งเสียงกรีดร้องของเราที่ความโค้งสีน้ำเงินอันงดงามของท้องฟ้า โชคดีที่ฉันทำงานกับแฮ็กเกอร์ที่ดีที่สุดบางคนที่ฉันเคยพบมาและฉันสามารถเข้าถึงบทกวีที่น่าทึ่งซึ่งเต็มไปด้วยเครื่องมือที่ยอดเยี่ยมและผู้คนที่ยอดเยี่ยม
สุภาพบุรุษ, ฉันซาบซึ้งอย่างมากและเสียใจเพียงว่าฉันไม่มีตัวแทนมากพอที่จะให้รางวัลแก่คุณทุกคนด้วยความกรุณา ฉันยังคงคิดว่านี่เป็นคำถามสำคัญที่จะได้คำตอบที่ดีกว่าคำถามที่เราได้รับมาจนถึงตอนนี้
เป็นผลให้ในแต่ละสัปดาห์สำหรับสามสัปดาห์ถัดไปฉันจะวางรางวัลที่ใหญ่ที่สุดที่ฉันสามารถจ่ายได้และมอบให้กับคำตอบด้วยเครื่องมือที่อร่อยที่สุดที่ฉันคิดว่าไม่ใช่ความรู้ทั่วไป หลังจากสามสัปดาห์เราหวังว่าจะได้รวบรวมโปรไฟล์ที่ชัดเจนของโปรไฟล์หากคุณยกเลิกการติดตามของฉัน
Take-away
ใช้ profiler มันดีพอสำหรับ Ritchie, Kernighan, Bentley และ Knuth ฉันไม่สนใจว่าคุณคิดว่าคุณเป็นใคร ใช้ profiler หากคนที่คุณมีไม่ทำงานให้หาคนอื่น หากคุณไม่พบหนึ่งรหัสหนึ่ง หากคุณไม่สามารถเขียนโค้ดได้หรือวางสายเล็ก ๆ หรือติดค้างอยู่ให้ใช้การหยุดแบบสุ่ม หากทุกอย่างล้มเหลวให้จ้างผู้สำเร็จการศึกษาบางคนเพื่อใช้เครื่องมือสร้างโปรไฟล์
ดูอีกต่อไป
ดังนั้นฉันคิดว่ามันคงจะดีถ้าเขียนย้อนหลังไปซักหน่อย ฉันเลือกที่จะทำงานอย่างกว้างขวางกับ Parallel Studios ซึ่งส่วนหนึ่งเป็นเพราะมันถูกสร้างขึ้นจากเครื่องมือ PIN เมื่อมีการติดต่อทางวิชาการกับนักวิจัยบางคนที่เกี่ยวข้องฉันรู้สึกว่านี่อาจเป็นเครื่องหมายของคุณภาพ โชคดีที่ฉันพูดถูก ในขณะที่ GUI นั้นค่อนข้างน่ากลัวฉันพบว่า IPS มีประโยชน์อย่างเหลือเชื่อ แต่ฉันไม่สามารถแนะนำได้อย่างสบายสำหรับทุกคน อย่างยิ่งไม่มีวิธีที่ชัดเจนในการรับจำนวนการเข้าชมระดับบรรทัดสิ่งที่ AQT และผู้ให้บริการรายอื่นจำนวนมากให้และฉันพบว่ามีประโยชน์มากสำหรับการตรวจสอบอัตราการเลือกสาขาจากสิ่งอื่น ๆ ในเน็ตฉันสนุกกับการใช้ AQTime ด้วยและฉันพบว่าการสนับสนุนของพวกเขานั้นตอบสนองได้ดีจริงๆ อีกครั้งฉันต้องผ่านการรับรอง: ฟีเจอร์มากมายของพวกเขานั้นใช้งานไม่ได้ดีและบางฟีเจอร์บางตัวนั้นใช้งานได้ง่ายบน Win7x64 XPerf ยังทำงานได้อย่างน่าทึ่ง แต่ช้ามากสำหรับรายละเอียดการสุ่มตัวอย่างที่ต้องใช้เพื่อให้สามารถอ่านแอปพลิเคชันบางประเภทได้ดี
ตอนนี้ฉันต้องบอกว่าฉันไม่คิดว่าจะมีตัวเลือกที่ชัดเจนสำหรับการทำโปรไฟล์ C ++ ในสภาพแวดล้อม W7x64 แต่มีตัวเลือกที่แน่นอนที่ไม่สามารถให้บริการที่มีประโยชน์