Казка хакера
Дата - 12.02.10. Дні перед Різдвом пропадають, і я досить сильно потрапив у головний блок дороги як програміст Windows. Я використовував AQTime, я спробував сонливий, блискучий і дуже сонний, і, як ми говоримо, VTune встановлює. Я намагався використовувати профілер VS2008, і це було позитивно покаранням, а також часто нечутливим. Я використав техніку випадкової паузи. Я оглянув дерева дзвінків. Я скинув функції слідів. Але сумний болісний факт у тому, що додаток, з яким я працюю, має понад мільйон рядків коду, мабуть, ще мільйон рядків варті сторонніх додатків.
Мені потрібні кращі інструменти. Я прочитав інші теми. Я випробував кожного перерахованого в кожній темі. Тут просто повинно бути щось краще, ніж ці незбагненні та дорогі варіанти, або смішні обсяги роботи майже без вигоди. Щоб ще більше ускладнити питання, наш код є сильним потоком і виконує ряд циклів подій Qt, деякі з яких настільки крихкі, що вони забиваються під час важких інструментів через затримки часу. Не запитуйте мене, чому ми виконуємо кілька циклів подій. Ніхто не може мені сказати.
Чи є якісь варіанти по лінії Valgrind в середовищі Windows?
Чи є щось краще, ніж довгий пробій розбитих інструментів, які я вже пробував?
Чи є щось, призначене для інтеграції з Qt, можливо, з корисним відображенням подій у черзі?
Повний перелік інструментів, які я спробував, з тими, які були справді корисними курсивом:
- AQTime: Досить добре! Виникає певна проблема з глибокою рекурсією, але графік виклику в цих випадках правильний, і його можна використовувати для усунення будь-якої плутанини, яка може виникнути. Не ідеальний інструмент, але варто спробувати. Це може відповідати вашим потребам, і це, безумовно, було досить добре для мене більшу частину часу.
- Випадкова пауза атаки в режимі налагодження: недостатньо інформації, часу достатньо.
Хороший інструмент, але не повне рішення. - Паралельні студії: ядерний варіант. Нав'язливий, дивний і шалено потужний. Я думаю, ви повинні підняти 30-денне оцінювання і зрозуміти, чи це добре. Це просто проклято круто.
- AMD Codeanalyst: Чудовий, простий у використанні, дуже схильний до аварій, але я думаю, що це навколишнє середовище. Я рекомендую спробувати його, оскільки це безкоштовно.
- Люк Stackwalker: Чудово працює на малих проектах, трохи намагається змусити це працювати над нашими. Хоча деякі непогані результати, і це, безумовно, замінює сонний для моїх особистих завдань.
- PurifyPlus: Немає підтримки для середовищ Win-x64, найбільш видатна Windows 7. Інакше чудово. Ряд моїх колег з інших відомств присягаються.
- VS2008 Profiler: Виводить вихід у діапазоні 100 гігів у режимі відстеження функцій при необхідній роздільній здатності. З іншого боку, це дає надійні результати.
- GProf: Вимагає, щоб GCC був навіть помірно ефективним.
- VTune: WTune W7 підтримує межу зі злочинністю. Інакше чудово
- ПІН: Мені потрібно зламати власний інструмент, тож це в крайньому випадку.
- Sleepy \ VerySleepy: Корисно для менших додатків, але тут мені не вдається.
- EasyProfiler: Непогано, якщо ви не заперечуєте трохи введеного вручну коду, щоб вказати, куди підключити інструмент.
- Valgrind: * nix тільки, але дуже добре, коли ти в цьому середовищі.
- OProfile: Лише Linux.
- Проффі: Вони стріляють у диких коней.
Пропоновані інструменти, які я не пробував:
- XPerf:
- Glowcode:
- Devpartner:
Примітки: на даний момент середовище Intel VS2008, збільшити бібліотеки. Qt 4+. І жалюгідний хамдінг із них усіх: інтеграція Qt / MFC через trolltech.
Зараз: Майже через два тижні, схоже, моє питання вирішено. Завдяки різноманітним інструментам, включаючи майже все в списку та пару моїх особистих хитрощів, ми знайшли основні вузькі місця. Однак я продовжую тестувати, досліджувати та випробовувати нові профілі, а також нові технології. Чому? Тому що я завдячую вам, хлопці, тому що ви, хлопці, рок. Це трохи сповільнює часову шкалу, але я все ще дуже рада продовжувати випробовувати нові інструменти.
Короткий огляд
Серед багатьох інших проблем, деякі компоненти нещодавно були переключені на неправильну модель різьблення, що спричинило серйозні зависання через те, що код під нами раптово більше не був багатопоточним. Я не можу сказати більше, тому що це порушує мій NDA, але я можу вам сказати, що цього не було б знайдено випадковим оглядом або навіть звичайним переглядом коду. Без профайлів, колграфів та випадкових пауз у поєднанні, ми все одно кричатимемо лють на прекрасну синю дугу неба. На щастя, я працюю з деякими найкращими хакерами, яких я коли-небудь зустрічав, і я маю доступ до дивовижного вірша, сповненого чудових інструментів та чудових людей.
Джентльменфолк, я дуже ціную це, і шкодую лише про те, що мені не вистачає представника, щоб нагородити кожного з вас щедротою. Я все ще вважаю, що це важливе питання, щоб отримати кращу відповідь, ніж ті, що ми отримали поки що щодо SO.
Як результат, щотижня протягом наступних трьох тижнів я буду виставляти найбільшу винагороду, яку я можу собі дозволити, і нагороджую її відповіддю найкращим інструментом, який, на мою думку, не є загальновідомим. Через три тижні, ми сподіваємось, накопичили остаточний профіль профайлів, якщо ви помилуєте моє покарання.
Винос
Використовуйте профілер. Вони досить хороші для Річі, Керніган, Бентлі та Кнут. Мені все одно, хто ти думаєш. Використовуйте профілер. Якщо той, який у вас є, не працює, знайдіть інший. Якщо ви не можете його знайти, кодуйте його. Якщо ви не можете його кодувати, або це невелика повіска, або ви просто застрягли, використовуйте випадкову паузу. Якщо все інше не вдасться, наймайте учнів з другого класу, щоб вирвати профайлера.
Довший вигляд
Отже, я подумав, що може бути приємно написати ретроспективу. Я вирішив широко працювати з Parallel Studios, частково тому, що він фактично побудований на основі інструмента PIN. Маючи академічні стосунки з деякими залученими дослідниками, я відчув, що це, мабуть, відмітка певної якості. На щастя, я мав рацію. Хоча GUI трохи жахливий, я виявив IPS неймовірно корисним, хоча не можу з комфортом рекомендувати його для всіх. Критично, немає очевидного способу отримати підрахунок ліній на рівні рядків - те, що пропонують AQT та ряд інших профілів, і я знайшов дуже корисним для вивчення швидкості вибору галузей серед іншого. У мережі я також насолоджувався використанням AQTime і виявив, що їх підтримка дуже реагує. Знову ж таки, я повинен кваліфікувати свою рекомендацію: Багато їх функцій не так добре працюють, і деякі з них прямо схильні до аварій на Win7x64. XPerf також чудово працював, але знемагає повільно для деталізації вибірки, необхідної для отримання чітких показників для певних програм.
Зараз я повинен сказати, що я не думаю, що існує певний варіант для профілювання коду C ++ у середовищі W7x64, але, безумовно, є варіанти, які просто не виконують жодної корисної послуги.