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