Может ли кто-нибудь дать краткое описание верхнего уровня, как работает Valgrind? Пример: как он узнает, когда выделена и освобождена память?Как работает valgrind?
ответ
Valgrind в основном запускает ваше приложение в «песочнице». Во время работы в этой изолированной среде он может вставлять свои собственные инструкции для выполнения расширенной отладки и профилирования.
Из инструкции:
Ваша программа затем запустить на синтетическом CPU при условии ядром Valgrind. Когда новый код выполняется в первый раз, ядро передает код выбранному инструменту. Инструмент добавляет к этому свой собственный инструментальный код и возвращает результат в ядро, которое координирует дальнейшее выполнение этого инструментального кода.
Таким образом, valgrind предоставляет виртуальный процессор, который выполняет ваше приложение. Однако перед обработкой ваших инструкций приложения они передаются в инструменты (например, memcheck). Эти инструменты вроде как плагины, и они могут модифицировать ваше приложение до его запуска на процессоре.
Главное в этом подходе состоит в том, что вам не нужно модифицировать или повторно использовать вашу программу, чтобы запустить ее в valgrind. Это заставляет вашу программу работать медленнее, однако valgrind не предназначен для измерения производительности или выполнения во время обычного выполнения вашего приложения, поэтому это не проблема.
valgrind находится в качестве слоя между вашей программой и ОС, перехватывая вызовы в ОС, запрашивая выделение памяти (де) и записывая то, что обрабатывается, а затем фактически выделяет память и передает эквивалент. По сути, большинство профайлов кода работают, за исключением гораздо более низкого уровня (системные вызовы вместо вызовов программных функций).
Valgrind - это, в основном, виртуальная машина, которая выполняет вашу программу. Это виртуальная архитектура, которая перехватывает каждый вызов для выделения/свободной памяти.
Здесь вы можете найти некоторые интересные данные:
- Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation
- http://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.wrapping
Кроме ознакомления с LD_PRELOAD.
Valgrind - это инструмент динамического двоичного анализа (DPA), который использует инфраструктуру динамического двоичного инструментария (DPI) для проверки распределения памяти, обнаружения взаимоблокировок и профилирования приложений. Платформа DPI имеет собственный менеджер памяти низкого уровня, планировщик, обработчик потока и обработчик сигналов. Набор инструментов Valgrind включает в себя инструмент, такой как
- Memcheck - отслеживает распределение памяти динамически и сообщает об утечке памяти.
- Helgrind - обнаруживает и сообщает о мертвых блокировках, потенциальных гонках данных и блокировках.
- Cachegrind - имитирует взаимодействие приложения с системным кешем и предоставляет информацию о пропущенных кешах.
- Nulgrind - простой valgrind, который никогда не анализирует. Используется разработчиками для тестирования производительности.
- Massif - инструмент для анализа использования памяти кучи приложения.
Инструмент Valgrind использует механизм дизассемблирования и resynthesize, где он загружает приложение в процесс, дизассемблирует код приложения, добавляет контрольный код для анализа, собирает его и выполняет приложение. Он использует компилятор Just Intime (JIT) для встраивания приложения с кодом инструментария.
Valgrind Tool = Valgrind Core + Tool Plugin
Valgrind Core дизассемблирует код приложения и передает фрагмент кода в плагин инструмента для инструментария. Плагин инструментов добавляет код анализа и собирает его обратно. Таким образом, Valgrind обеспечивает гибкость для написания собственного инструмента поверх структуры Valgrind. Valgrind использует теневые регистры и теневую память для инструкций чтения/записи инструмента, системного вызова чтения/записи, распределения стека и кучи.
Valgrind предлагает обертки вокруг системного вызова и регистров для предварительных и последующих обратных вызовов для каждого системного вызова для отслеживания доступа к памяти, входящего в системный вызов. Таким образом, Valgrind - это уровень абстракции ОС между операционной системой Linux и клиентским приложением.
Диаграмма иллюстрирует 8 фаз Valgrind:
можете ли вы сообщить мне источник этой информации или любую ссылку, содержащую эти данные? Благодарю. – mezda
Здесь вы идете .. http://valgrind.org/docs/valgrind2007.pdf –
- 1. Почему не работает Valgrind?
- 2. Valgrind не работает с WSL?
- 3. VALGRIND: Как использовать valgrind для библиотеки «.so»?
- 4. Как вращать журналы valgrind во время процесса valgrind
- 5. valgrind работает только от корневого каталога
- 6. Как использовать Valgrind эффективно
- 7. Как исправить ошибки valgrind?
- 8. Valgrind обнаруживает утечку памяти, но приложение работает
- 9. Как сказать valgrind игнорировать SIGSEGV
- 10. running valgrind
- 11. MemoryLeak Valgrind
- 12. Как изучить базовый файл, сгенерированный при программе работает под Valgrind
- 13. Valgrind - Ошибка
- 14. Valgrind error
- 15. Valgrind отчет
- 16. Выход Valgrind
- 17. openssl/valgrind
- 18. Как использовать valgrind с python?
- 19. как прочитать эту информацию VALGRIND
- 20. Как измерить использование памяти Valgrind?
- 21. Срок действия Valgrind
- 22. Отладка ядра, созданного valgrind
- 23. Yosemite and Valgrind
- 24. Сообщение valgrind "Killed"
- 25. Обнаружение утечки памяти Valgrind
- 26. Использование valgrind на Mac
- 27. valgrind неправильное расположение вывода
- 28. Интерпретация Valgrind в C
- 29. Как запустить valgrind с Android-приложением?
- 30. Как использовать Valgrind и vera ++ в окнах
В этой статье Джулиан Seward расширяется немного от конструкции Valgrind: http://courses.cs.washington.edu/courses/cse326 /05wi/valgrind-doc/mc_techdocs.html – user11171