Ответ 1
Набор инструментов Valgrind [Linux и OS/X]
Я использовал Memcheck, и он работает как рекламируемый. Однако я не использовал инструменты визуализации. Не уверен, что выход Helgrind может быть адаптирован для просмотра с помощью kCachegrind.
В дистрибутив Valgrind входят четыре [sic] полезные инструменты для отладки и профилирования:
-
Memcheck обнаруживает проблемы управления памятью и ориентирован прежде всего на программы на C и С++. Когда программа запускается под наблюдением Memcheck, все чтения и записи памяти проверяются, а вызовы malloc/new/free/delete перехватываются. В результате Memcheck может обнаружить, если ваша программа:
Доступ к памяти не должен... Использует неинициализированные значения опасным образом. Утечка памяти. Делает плохое освобождение блоков кучи (двойное освобождение, несоответствие освобождает). Пропускает перекрывающиеся блоки источника и назначения памяти с memcpy() и связанными с ними функциями. Memcheck сообщает об этих ошибках, как только они появляются, указывая номер исходной строки, с которой она произошла...
-
Cachegrind - это профилировщик кеша. Он выполняет детальное моделирование кэшей I1, D1 и L2 в вашем CPU и поэтому может точно определить источники промахов в вашем коде...
-
Callgrind, Josef Weidendorfer, является продолжением Cachegrind. Он предоставляет всю информацию, которую делает Cachegrind, а также дополнительную информацию о callgraphs. Он был сложен в основное распределение Valgrind в версии 3.2.0. Доступно отдельно - это удивительный инструмент визуализации, KCachegrind, который дает гораздо лучший обзор данных, которые собирает Callgrind; его также можно использовать для визуализации вывода Cachegrind.
-
Massif - это профилировщик кучи. Он выполняет подробное профилирование кучи, выполняя регулярные снимки кучи программ. Он создает график, показывающий использование кучи с течением времени, включая информацию о том, какие части программы отвечают за большинство распределений памяти...
-
Helgrind - это отладчик потоков, который находит расы данных в многопоточных программах. Он ищет ячейки памяти, к которым обращаются более одного (POSIX p-) потока, но для которых не существует постоянной блокировки (pthread_mutex_). Такие местоположения указывают на отсутствие синхронизации между потоками и могут вызвать труднодоступные проблемы, зависящие от времени. Это полезно для любой программы, использующей pthreads. Это несколько экспериментальный инструмент, поэтому ваши отзывы особенно приветствуются здесь.