Як працює валгринд?


80

Хтось може дати коротке пояснення на найвищому рівні про те, як працює Valgrind? Приклад: звідки він знає, коли пам’ять виділяється та звільняється?

Відповіді:


106

В основному Valgrind запускає ваш додаток у "пісочниці". Під час роботи в цій пісочниці він може вставити власні вказівки щодо розширеного налагодження та профілювання.

З посібника:

Потім ваша програма запускається на синтетичному процесорі, що надається ядром Valgrind. Оскільки новий код виконується вперше, ядро ​​передає код вибраному інструменту. Інструмент додає до цього власний код інструментарію і передає результат назад до ядра, яке координує подальше виконання цього інструментального коду.

Отже, в основному valgrind надає віртуальний процесор, який виконує вашу програму. Однак перед тим, як інструкції з вашої програми обробляються, вони передаються інструментам (наприклад, memcheck). Ці інструменти схожі на плагіни, і вони можуть модифікувати вашу програму до її запуску на процесорі.

Чудова річ цього підходу полягає в тому, що вам не потрібно взагалі змінювати або перезв’язувати свою програму, щоб запускати її у valgrind. Це призводить до того, що ваша програма працює повільніше, однак valgrind не призначена для вимірювання продуктивності або запуску під час нормального виконання програми, тому насправді це не проблема.


3
Ця стаття Джуліан Сьюард розширює трохи про конструкції Valgrind: courses.cs.washington.edu/courses/cse326/05wi/valgrind-doc / ...
user11171

34

Valgrind - це інструмент динамічного двійкового аналізу (DPA), який використовує систему динамічного двійкового приладобудування (DPI) для перевірки розподілу пам'яті, виявлення тупикових ситуацій та профілювання програм. DPI Framework має власний менеджер пам'яті низького рівня, планувальник, обробник потоків та обробник сигналів. Набір інструментів Valgrind включає такі інструменти, як

  1. Memcheck - динамічно відстежує виділення пам’яті та повідомляє про витоки пам’яті.
  2. Helgrind - виявляє та повідомляє про блокування, потенційні гонки даних та скасування блокування.
  3. Cachegrind - імітує взаємодію програми з кешем системи та надає інформацію про помилки кешу.
  4. Нульгринд - простий валгринд, який ніколи не робить жодного аналізу. Використовується розробниками для тестування продуктивності.
  5. Масив - інструмент для аналізу використання пам'яті купи програми.

Інструмент Valgrind використовує механізм розбирання та пересинтезу, де завантажує програму в процес, розбирає код програми, додає код інструментарію для аналізу, збирає його назад і виконує програму. Він використовує Just Intime Compiler (JIT) для вбудовування програми з кодом приладів.

             Valgrind Tool = Valgrind Core + Tool Plugin

Valgrind Core розбирає код програми та передає фрагмент коду плагіну інструменту для контрольно-вимірювальних приладів. Плагін інструменту додає код аналізу та збирає його назад. Таким чином, Valgrind забезпечує гнучкість написання нашого власного інструменту поверх фреймворку Valgrind. Valgrind використовує тіньові регістри та тіньову пам'ять для інструментарію інструкцій зчитування / запису, читання / запису системних викликів, розподілу стека та купи.

Valgrind надає обгортки навколо системного виклику та реєстри для попереднього та після зворотного викликів для кожного системного виклику для відстеження пам'яті, до якої здійснюється доступ як частина системного виклику. Таким чином, Valgrind - це рівень абстракції ОС між операційною системою Linux та клієнтським додатком.

Діаграма ілюструє 8 фаз Valgrind:

8 фаз Вальгрінда


Ви можете повідомити мені джерело цієї інформації або будь-яке посилання, що містить ці деталі? Дякую.
мезда 21.03.15

4

valgrind сидить як шар між вашою програмою та ОС, перехоплюючи виклики до ОС, вимагаючи виділення пам'яті (де) та записуючи те, чим маніпулюють, а потім фактично виділяючи пам'ять та передаючи назад еквівалент. По суті, це те, як працює більшість профайлерів коду, за винятком набагато нижчого рівня (системні виклики замість викликів функцій програми).



2

Valgrind - це в основному віртуальна машина, яка виконує вашу програму. Це віртуальна архітектура, яка перехоплює кожен виклик для виділення / звільнення пам'яті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.