Журнал LinuxFormat - перейти на главную

LXF87-88:Valgrind

Материал из Linuxformat
Перейти к: навигация, поиск

Valgrind 3.2.1

Грэм Моррисон спустился в недра отладки, а путь ему освещал Valgrind, всевидящий ловец ошибок.

За четыре года, прошедшие со дня его выхода в свет, Valgrind стал неотъемлемой частью процесса программирования на C/C++. Этот вклад был отмечен премией Google–O’Reilly Open Source Award на Open Source Conference (OSCon) 2006 года, а Firefox, OpenOffice.org, Opera, KDE, Gnome и Unreal Tournament имели бы куда больше проколов, если бы не Valgrind. И уж конечно, все они были бы медлительнее – кроме, пожалуй, OpenOffice.org (куда уж еще-то?).

У Valgrind нетипичный подход к отладке: он встраивает вашу программу в собственную виртуальную машину и может отследить любую команду и выделение памяти, контролируя каждый регистр и байт. В результате возникают две проблемы. Во-первых, вы привязаны к интерпретации процессора Valgrind’ом, и если ваша программа полагается на специфическую команду процессора, Valgrind обязан ее поддерживать. К счастью, отладчик постоянно совершенствует свой арсенал, и к новейшей версии Valgrind добавлены 64-битные команды AMD и поддержка почти всех команд SSE3, имеющихся в новейших Pentium 4 и Athlon. Трудности могут быть только у тех, кто компилирует программное обеспечение на ультрасовременных процессорах.

Вторая проблема – Valgrind тормозит. С учетом объема работы по слежению за каждым действием вашей программы, это неизбежно, и все же неповоротливость отладчика шокирует. Старт Konqueror в KDE на нашем компьютере с CPU 3 ГГц занял 1,5 минуты (обычно – 3 секунды), а общение с браузером замедлилось раз в 20. Но при этом было отмечено увеличение скорости на 15 % по сравнению с прежней версией Valgrind (3.1.0), так что положение улучшается.

Valgrind не просто указывает на ошибки в вашем собственном ходе, он отмечает таковые во всех библиотеках, которыми вы пользуетесь. Этот список может стать чудовищным: за время типового сеанса генерируются сотни ошибок – даже если ваш код безупречен. Хорошо еще, что вывод можно фильтровать, используя заготовленный профиль. Например, профиль KDE обходит все ошибки, найденные в библиотеках KDE, облегчая вам поиск собственных промашек. Valgrind может форматировать список в виде XML, и с ним можно работать в графической оболочке при помощи отдельной программы Valkyrie или среды разработки KDevelop.

Грызя гранит

Метод виртуальной машины, применяемый Valgrind для контроля памяти, оказался настолько плодотворным, что некоторые другие пакеты инструментов прибрали его к рукам. Среди них Massif для проверки использования памяти; Helgrind для отлова состояний гонки (race) в многопоточном коде; и Cachegrind, отмечающий время, затраченное процессором на каждую из функций.

Процесс невероятно ресурсоемкий, и чтобы извлечь максимум из своего софта, вам понадобится мощная машина и терпение святого. И все же работа с Valgrind неизмеримо проще, чем многонедельный поиск причин периодического краха вашей программы, ведь Valgrind находит такие ошибки, которые больше никто не может отыскать. Для изучения инструментов вам понадобится только время: умения нужно не больше, чем для написания собственного кода. Несмотря на сложность вывода и многочисленность программ, включенных в комплект, программист средних способностей может многому научиться, пропуская свои работы через Valgrind, а для продвинутого программиста это «брат по разуму». LXF

Свойства навскидку

LXF88_Valgrind2.png

  • KCachegrind Чем больше прямоугольник функции, тем больше процессорного времени она съедает

LXF88_Valgrind3.png

  • Библиотечные профили Можно отфильтровывать лишние ошибки с помощью загружаемых профилей.
Персональные инструменты
купить
подписаться
Яндекс.Метрика