~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0016DB6A643BE89C8FAB50A9FA9927E2__1718773860 ✰
Заголовок документа оригинал.:
✰ Valgrind - Wikipedia ✰
Заголовок документа перевод.:
✰ Валгринд — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Valgrind ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/00/e2/0016db6a643be89c8fab50a9fa9927e2.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/00/e2/0016db6a643be89c8fab50a9fa9927e2__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:34:49 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 19 June 2024, at 08:11 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Валгринд — Википедия Jump to content

Избирательные ворота

Из Википедии, бесплатной энциклопедии
Оригинальный автор(ы) Джулиан Сьюард , Николас Незеркот [1]
Разработчики) Команда разработчиков Валгринд [2]
Начальная версия 27 июля 2002 г. [3]
Стабильная версия 3.23.0 (26 апреля 2024 г.; 54 дня назад ( 26.04.2024 ) ) [±] [4]
Репозиторий
Написано в С
Операционная система Линукс
FreeBSD
Солярис
Андроид [5]
Тип Профилировщик , отладчик памяти
Лицензия Стандартная общественная лицензия GNU
Веб-сайт www .valgrind .org

Валгринд ( / ˈ v æ l ɡ r ɪ n d / ) [6] инструмент программирования для отладки памяти , обнаружения утечек памяти и профилирования .

Первоначально Valgrind разрабатывался как свободно лицензируемый инструмент отладки памяти для Linux на x86 , но с тех пор превратился в универсальную платформу для создания инструментов динамического анализа, таких как средства проверки и профилирования.

Обзор [ править ]

Valgrind, по сути, представляет собой виртуальную машину, использующую методы JIT-компиляции , включая динамическую перекомпиляцию . Ничто из исходной программы никогда не запускается непосредственно на хост- процессоре . Вместо этого Valgrind сначала переводит программу во временную, более простую форму, называемую промежуточным представлением (IR), которая представляет собой нейтральную к процессору статическую форму с одним присвоением, основанную на форме. После преобразования инструмент (см. ниже) может выполнять любые преобразования IR, прежде чем Valgrind преобразует IR обратно в машинный код и позволяет хост-процессору запустить его. Valgrind перекомпилирует двоичный код для работы на хосте и целевых (или смоделированных) процессорах одной и той же архитектуры. Он также включает в себя заглушку GDB , позволяющую отлаживать целевую программу во время ее работы в Valgrind, с «командами мониторинга», которые позволяют запрашивать у инструмента Valgrind различную информацию.

При этих преобразованиях (и обычно в коде, вставляемом инструментом) теряется значительная часть производительности; обычно код, запускаемый с помощью Valgrind, и инструмент «none» (который ничего не делает с IR) работает со скоростью от 20% до 25% от скорости обычной программы. [7] [8]

Инструменты [ править ]

Проверка памяти [ править ]

В Valgrind включено несколько инструментов (и несколько внешних). Инструмент по умолчанию (и наиболее часто используемый) — Memcheck . Memcheck вставляет дополнительный инструментальный код почти ко всем инструкциям, который отслеживает достоверность (вся нераспределенная память начинается как недействительная или «неопределенная», пока она не будет инициализирована в детерминированное состояние, возможно, из другой памяти) и адресность (независимо от того, находится ли адрес памяти в вопрос указывает на выделенный, не освобожденный блок памяти), хранящийся в так называемых битах V и битах A соответственно. Когда данные перемещаются или манипулируются ими, инструментальный код отслеживает биты A и V, поэтому они всегда верны на однобитовом уровне.

Кроме того, Memcheck заменяет стандартные распределители C++ и распределитель памяти C своей собственной реализацией, которая также включает защиту памяти вокруг всех выделенных блоков (с битами A, установленными в «недействительные»). Эта функция позволяет Memcheck обнаруживать ошибки с отклонением на единицу, когда программа читает или записывает данные за пределы выделенного блока на небольшую величину. Проблемы, которые Memcheck может обнаружить и предупредить, включают следующее:

  • Чтение неинициализированной памяти
  • Чтение/запись недействительной памяти, которая может быть
    • память, которая была freeбы
    • память за пределами mallocблоки
    • память под указателем стека
  • Использование неверных параметров для системных вызовов
  • Небезопасное перекрытие копий памяти с mem* и str* функции
  • Утечки памяти
  • Несовпадающие выделения и освобождения, которые могут быть
    • смешивание C и C++, например, malloc и delete
    • смешивание скаляра и массива, например, new и delete[]
    • размер освобождения не совпадает с размером выделения
    • выровненное освобождение — это не то же самое выравнивание, что и выделение
  • Использование неправильного выравнивания
  • Использование realloc с нулевым размером

Цена этого – потеря производительности. Программы, работающие под Memcheck, обычно работают в 20–30 раз медленнее. [9] чем работать за пределами Valgrind и использовать больше памяти (за каждое выделение взимается штраф). Таким образом, лишь немногие разработчики постоянно запускают свой код с помощью Memcheck (или любого другого инструмента Valgrind). Чаще всего они используют такие инструменты либо для отслеживания какой-то конкретной ошибки, либо для проверки отсутствия скрытых ошибок (тех, которые может обнаружить Memcheck) в коде.

Другие инструменты [ править ]

Помимо Memcheck, в Valgrind есть еще несколько инструментов: [10]

  • None , запускает код на виртуальной машине без выполнения какого-либо анализа и, таким образом, имеет минимальную нагрузку на процессор и память среди всех инструментов. Поскольку сам Valgrind обеспечивает обратную трассировку от ошибки сегментации , инструмент none обеспечивает эту обратную трассировку с минимальными издержками.
  • Addrcheck похож на Memcheck, но с гораздо меньшими нагрузками на процессор и память, что позволяет выявлять меньше типов ошибок. Addrcheck был удален начиная с версии 3.2.0. [11]
  • Massif кучи профилировщик . Отдельный графический визуализатор массива визуализирует выходные данные Massif.
  • Helgrind и DRD обнаруживают состояния гонки в многопоточном коде
  • Cachegrind профилировщик кэша . Отдельный графический интерфейс KCacheGrind визуализирует выходные данные Cachegrind.
  • Callgrind анализатор графа вызовов , созданный Йозефом Вайдендорфером, добавленный в Valgrind начиная с версии 3.2.0. KCacheGrind может визуализировать выходные данные Callgrind.
  • DHAT — инструмент динамического анализа кучи, который анализирует, сколько памяти выделено и как долго, а также закономерности использования памяти.
  • exp-bbv — симулятор производительности, который экстраполирует производительность на небольшом наборе выборок.

exp-sgcheck ( называвшийся exp-ptrcheck до версии 3.7 ) был удален в версии 3.16.0. Это был экспериментальный инструмент для поиска ошибок переполнения стека и глобального массива, которые Memcheck не может обнаружить.

Также доступно несколько инструментов сторонней разработки. Одним из таких инструментов является ThreadSanitizer, еще один детектор состояний гонки . [12] [13]

Поддерживаемые платформы [ править ]

Начиная с версии 3.4.0, Valgrind поддерживает Linux на x86 , x86-64 и PowerPC . Поддержка Linux на ARMv7 (используется, например, в некоторых смартфонах ) была добавлена ​​в версии 3.6.0. [14] Поддержка Solaris была добавлена ​​в версии 3.11.0. [5] Поддержка OS X была добавлена ​​в версии 3.5.0. [15] Поддержка FreeBSD x86 и amd64 была добавлена ​​в версии 3.18.0. Поддержка FreeBSD aarch64 была добавлена ​​в версии 3.23.0. Существуют неофициальные порты на другие Unix-подобные платформы (например , OpenBSD , [16] NetBSD [17] и QNX [18] ). ARM/ Android . С версии 3.7.0 добавлена ​​поддержка платформы [5]

Начиная с версии 3.9.0 имеется поддержка Linux на MIPS64 с прямым и прямым порядком байтов, для MIPS DSP ASE на MIPS32 , для s390x инструкций с десятичной плавающей запятой , для инструкций POWER8 ( Power ISA 2.07 ), для инструкций Intel AVX2 , для расширений Intel Transactional Synchronization Extensions. , как RTM, так и HLE, а также начальную поддержку аппаратной транзакционной памяти на POWER. [4]

и развитие История

Название Валгринд является отсылкой к главному входу в Валгаллу из скандинавской мифологии . [19] [20] Во время разработки (до релиза) проект назывался Heimdall ; однако это имя противоречило бы пакету безопасности.

Первоначальным автором Valgrind является Джулиан Сьюард , который в 2006 году получил премию Google-O'Reilly Open Source Award за свою работу над Valgrind. [21] [22]

Несколько других также внесли значительный вклад, в том числе Николас Нетеркот, Барт Ван Аш, Флориан Кром, Том Хьюз, Филипп Варокье, Марк Вилаард, Пол Флойд, Петар Йованович, Карл Лав, Церион Армур-Браун и Иво Райср. [23]

Он используется рядом проектов на базе Linux. [24]

Ограничения Memcheck [ править ]

Помимо снижения производительности, важным ограничением Memcheck является его неспособность обнаружить все случаи ошибок границ при использовании статических данных или данных, выделенных в стеке. [25] Следующий код без проблем пропустит инструмент Memcheck в Valgrind, несмотря на ошибки, описанные в комментариях:

  int   Статический  [  5  ]; 
  
    int   func  (  void  ) 
   { 
     int   Stack  [  5  ]; 
  
      Статический  [  5  ]   =   0  ;     /* Ошибка: существуют значения от Static[0] до Static[4], Static[5] выходит за пределы */ 
     Stack   [  5  ]   =   0  ;     /* Ошибка — Stack[0] — Stack[4] существует, Stack[5] выходит за пределы */ 
    
     return   0  ; 
    } 


Невозможность обнаружить все ошибки, связанные с доступом к данным, выделенным в стеке, особенно примечательна, поскольку определенные типы ошибок стека делают программное обеспечение уязвимым для классического эксплойт для разрушения стека .

См. также [ править ]

Примечания [ править ]

  1. ^ "АВТОРЫ" . valgrind.org . Проверено 19 сентября 2022 г.
  2. ^ «Валгринд: Разработчики» .
  3. ^ «Двадцать лет Валгринду» . Проверено 4 августа 2023 г.
  4. ^ Перейти обратно: а б Новости Валгринд
  5. ^ Перейти обратно: а б с Примечания к выпуску Валгринда
  6. ^ «Вальгринд» . valgrind.org . Проверено 4 мая 2023 г.
  7. ^ Домашняя страница Валгринда
  8. ^ Руководство Валгринд
  9. ^ «Вальгринд» .
  10. ^ Основной список инструментов Valgrind
  11. ^ «Вальгринд» .
  12. ^ «Валгринд: Варианты/Патчи» .
  13. ^ К. Серебряный, Т. Исходжанов, ThreadSanitizer – обнаружение гонок данных на практике , Материалы семинара по двоичному инструментированию и приложениям WBIA'09
  14. ^ Порт ARM/Linux
  15. ^ Экспорт ОС
  16. ^ Порт Valgrind OpenBSD
  17. ^ «Порт Valgrind NetBSD» . Архивировано из оригинала 9 февраля 2006 г. Проверено 28 января 2006 г.
  18. ^ «foundry27: Посмотреть выпуск» . сообщество.qnx.com . Проверено 24 мая 2024 г.
  19. ^ Часто задаваемые вопросы о Валгринде
  20. ^ «Комиксы» . Валуспа.org .
  21. ^ список наград valgrind.org.
  22. ^ Google-O'Reilly Open Source Awards - Зал славы
  23. ^ Разработчики Valgrind
  24. ^ список пользователей valgrind.org
  25. ^ Часто задаваемые вопросы о Валгринде

Ссылки [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0016DB6A643BE89C8FAB50A9FA9927E2__1718773860
URL1:https://en.wikipedia.org/wiki/Valgrind
Заголовок, (Title) документа по адресу, URL1:
Valgrind - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)