Хакерская сказка
Дата 12/02/10. Проходят дни перед Рождеством, и я, в основном, работаю Windows-программистом. Я использовал AQTime, я пробовал сонный, блестящий и очень сонный, и, как мы говорим, VTune устанавливает. Я пытался использовать профилировщик VS2008, и это было как положительно, так и часто незаметно. Я использовал технику случайной паузы. Я исследовал деревья вызовов. Я запустил функциональные следы. Но печальный и болезненный факт заключается в том, что приложение, с которым я работаю, содержит более миллиона строк кода и, вероятно, еще миллион строк сторонних приложений.
Мне нужны лучшие инструменты. Я читал другие темы. Я опробовал каждый профилировщик, указанный в каждой теме. Просто должно быть что-то лучшее, чем эти неопрятные и дорогие варианты, или смехотворное количество работы почти без выгоды. Чтобы еще больше усложнить ситуацию, наш код сильно переплетен и запускает несколько циклов Qt Event, некоторые из которых настолько хрупки, что из-за задержек синхронизации вылетают из-за тяжелых инструментов. Не спрашивайте меня, почему мы запускаем несколько циклов событий. Никто не может сказать мне.
Есть ли какие-либо варианты в духе Valgrind в среде Windows?
Есть ли что-нибудь лучше, чем длинная полоса сломанных инструментов, которые я уже пробовал?
Есть ли что-то, предназначенное для интеграции с Qt, возможно, с полезным отображением событий в очереди?
Полный список инструментов, которые я пробовал, с теми, которые были действительно полезны курсивом:
- AQTime: довольно хорошо! Есть некоторые проблемы с глубокой рекурсией, но в этих случаях граф вызовов верен и может использоваться для устранения любой путаницы, которая может возникнуть. Не идеальный инструмент, но стоит попробовать. Это может удовлетворить ваши потребности, и это, безусловно, было достаточно хорошо для меня большую часть времени.
- Атака случайной паузой в режиме отладки: недостаточно информации достаточно времени.
Хороший инструмент, но не полное решение. - Parallel Studios: ядерный вариант. Навязчивый, странный и безумно мощный. Я думаю, что вы должны пройти 30-дневную оценку и выяснить, подходит ли она вам. Это просто чертовски круто тоже.
- AMD Codeanalyst: замечательный, простой в использовании, очень подверженный сбоям, но я думаю, что это вещь окружающей среды. Я бы порекомендовал попробовать это, так как это бесплатно.
- Люк Стакуокер: Отлично работает на небольших проектах, немного пытается заставить его работать на наших. Хотя некоторые хорошие результаты, и это определенно заменяет Sleepy для моих личных задач.
- PurifyPlus: нет поддержки сред Win-x64, особенно Windows 7. В остальном отлично. Ряд моих коллег в других отделах клянутся этим.
- Профилировщик VS2008: Производит вывод в диапазоне 100+ гигов в режиме трассировки функций с требуемым разрешением. С положительной стороны, дает хорошие результаты.
- GProf: Требует, чтобы GCC был даже умеренно эффективным.
- VTune: поддержка VT7 W7 граничит с преступностью. В остальном отлично
- ПИН: Мне нужно взломать мой собственный инструмент, так что это своего рода последнее средство.
- Sleepy \ VerySleepy: Полезно для небольших приложений, но мне не удалось.
- EasyProfiler: Неплохо, если вы не возражаете против небольшого количества кода, введенного вручную, чтобы указать, где использовать инструмент.
- Valgrind: * nix только, но очень хорошо, когда вы находитесь в этой среде.
- OProfile: только для Linux.
- Proffy: они стреляют в диких лошадей.
Предлагаемые инструменты, которые я не пробовал:
- XPERF:
- Glowcode:
- DevPartner:
Примечания: среда Intel на данный момент. VS2008, буст библиотеки. Qt 4+. И жалкий скандал всех их: интеграция Qt / MFC через trolltech.
Теперь: почти две недели спустя, похоже, моя проблема решена. Благодаря множеству инструментов, включая почти все в списке и пару моих личных приемов, мы нашли основные узкие места. Тем не менее, я собираюсь продолжать тестировать, исследовать и опробовать новые профилировщики, а также новые технологии. Зачем? Потому что я в долгу перед вами, ребята, потому что вы, ребята, молодцы. Это немного замедляет сроки, но я все еще очень рад продолжать пробовать новые инструменты.
Краткий обзор
Среди многих других проблем ряд компонентов был недавно переключен на неправильную модель многопоточности, вызывая серьезные зависания из-за того, что код под нами внезапно перестал быть многопоточным. Я не могу сказать больше, потому что это нарушает мой NDA, но я могу сказать вам, что это никогда не было бы обнаружено при случайной проверке или даже при обычном просмотре кода. Без профилировщиков, графов вызовов и случайной паузы в сочетании мы все равно будем кричать от ярости на красивой синей дуге неба. К счастью, я работаю с некоторыми из лучших хакеров, которых я когда-либо встречал, и у меня есть доступ к удивительному стиху, полному отличных инструментов и замечательных людей.
Джентльфолки, я очень ценю это, и только сожалею, что у меня недостаточно представителя, чтобы наградить каждого из вас щедростью. Я все еще думаю, что это важный вопрос, чтобы получить лучший ответ, чем те, которые мы получили до сих пор на SO.
В результате, каждую неделю в течение следующих трех недель я буду получать самую большую награду, которую я могу себе позволить, и буду награждать ее ответом с помощью лучшего инструмента, который, на мой взгляд, не является общеизвестным. Через три недели, мы надеемся, мы накопим определенный профиль профилировщиков, если вы простите мое наказание.
На вынос
Используйте профилировщик. Они достаточно хороши для Ричи, Кернигана, Бентли и Кнута. Мне все равно, кто ты такой. Используйте профилировщик. Если тот, который у вас есть, не работает, найдите другого. Если вы не можете найти его, используйте один код. Если вы не можете кодировать один, или это небольшое зависание, или вы просто застряли, используйте случайную паузу. Если все остальное терпит неудачу, нанять некоторых аспирантов, чтобы ударить профилировщик.
Более длинный взгляд
Итак, я подумал, что было бы неплохо написать небольшую ретроспективу. Я решил активно работать с Parallel Studios, отчасти потому, что он фактически построен на основе инструмента PIN. Имея академические отношения с некоторыми из вовлеченных исследователей, я чувствовал, что это, вероятно, знак некоторого качества. К счастью, я был прав. Хотя графический интерфейс немного ужасен, я обнаружил, что IPS невероятно полезен, хотя я не могу рекомендовать его всем. Крайне важно, что нет очевидного способа получить количество попаданий на уровне строки, что обеспечивают AQT и ряд других профилировщиков, и я нашел очень полезным для изучения скорости выбора веток среди прочего. В сети мне также понравилось использовать AQTime, и я обнаружил, что их поддержка действительно отзывчива. Опять же, я должен квалифицировать свою рекомендацию: Многие из их функций работают не так хорошо, а некоторые из них прямо подвержены сбоям на Win7x64. XPerf также работает превосходно, но мучительно медленно для деталей выборки, необходимых для получения хорошего чтения в определенных видах приложений.
Прямо сейчас я должен сказать, что я не думаю, что есть определенная опция для профилирования кода C ++ в среде W7x64, но, безусловно, есть опции, которые просто не в состоянии выполнить какую-либо полезную услугу.