누군가 Valgrind가 어떻게 작동하는지에 대한 빠른 최고 수준의 설명을 제공 할 수 있습니까? 예 : 메모리가 할당되고 해제되는시기를 어떻게 알 수 있습니까?
답변
Valgrind는 기본적으로 “샌드 박스”에서 애플리케이션을 실행합니다. 이 샌드 박스에서 실행하는 동안 자체 지침을 삽입하여 고급 디버깅 및 프로파일 링을 수행 할 수 있습니다.
매뉴얼에서 :
그런 다음 프로그램은 Valgrind 코어에서 제공하는 합성 CPU에서 실행됩니다. 새 코드가 처음으로 실행되면 코어는 선택한 도구에 코드를 전달합니다. 이 도구는 자체 계측 코드를 여기에 추가하고 결과를 코어에 다시 전달하여 계측 된 코드의 지속적인 실행을 조정합니다.
따라서 기본적으로 valgrind는 애플리케이션을 실행하는 가상 프로세서를 제공합니다. 그러나 응용 프로그램 지침이 처리되기 전에 도구 (예 : memcheck)로 전달됩니다. 이러한 도구는 일종의 플러그인과 비슷하며 프로세서에서 실행되기 전에 애플리케이션을 수정할 수 있습니다.
이 접근 방식의 가장 좋은 점은 valgrind에서 실행하기 위해 프로그램을 수정하거나 다시 연결할 필요가 없다는 것입니다. 이로 인해 프로그램이 느리게 실행되지만 valgrind는 성능을 측정하거나 애플리케이션의 정상적인 실행 중에 실행되는 것이 아니므로 실제로 문제가되지 않습니다.
답변
Valgrind는 동적 바이너리 계측 (DPI) 프레임 워크를 사용하여 메모리 할당을 확인하고 교착 상태를 감지하며 애플리케이션을 프로파일 링하는 DPA (Dynamic Binary Analysis) 도구입니다. DPI 프레임 워크에는 자체 저수준 메모리 관리자, 스케줄러, 스레드 처리기 및 신호 처리기가 있습니다. Valgrind 도구 모음에는 다음과 같은 도구가 포함됩니다.
- Memcheck-메모리 할당을 동적으로 추적하고 메모리 누수를보고합니다.
- Helgrind-데드락, 잠재적 인 데이터 경합 및 잠금 반전을 감지하고보고합니다.
- Cachegrind-애플리케이션이 시스템 캐시와 상호 작용하는 방식을 시뮬레이션하고 캐시 누락에 대한 정보를 제공합니다.
- Nulgrind-어떤 분석도하지 않는 단순한 valgrind. 성능 벤치 마크를 위해 개발자가 사용합니다.
- Massif-애플리케이션의 힙 메모리 사용량을 분석하는 도구입니다.
Valgrind 도구는 분해 및 재 합성 메커니즘을 사용하여 응용 프로그램을 프로세스에로드하고, 응용 프로그램 코드를 분해하고, 분석을위한 계측 코드를 추가하고, 다시 어셈블하고 응용 프로그램을 실행합니다. JIT (Just Intime Compiler)를 사용하여 계측 코드와 함께 응용 프로그램을 포함합니다.
Valgrind Tool = Valgrind Core + Tool Plugin
Valgrind Core는 애플리케이션 코드를 분해하고 코드 조각을 도구 플러그인에 전달하여 계측합니다. 도구 플러그인은 분석 코드를 추가하고 다시 조립합니다. 따라서 Valgrind는 Valgrind 프레임 워크 위에 자체 도구를 작성할 수있는 유연성을 제공합니다. Valgrind는 섀도우 레지스터와 섀도우 메모리를 사용하여 읽기 / 쓰기 명령, 읽기 / 쓰기 시스템 호출, 스택 및 힙 할당을 계측합니다.
Valgrind는 시스템 호출에 대한 래퍼를 제공하고 모든 시스템 호출에 대한 사전 및 사후 콜백을 등록하여 시스템 호출의 일부로 액세스 된 메모리를 추적합니다. 따라서 Valgrind는 Linux 운영 체제와 클라이언트 응용 프로그램 간의 OS 추상화 계층입니다.
다이어그램은 Valgrind의 8 단계를 보여줍니다.
답변
valgrind는 프로그램과 OS 사이의 레이어 역할을하여 메모리 할당을 요청하는 OS 호출을 가로 채서 실제로 메모리를 할당하고 이에 상응하는 것을 다시 전달하기 전에 조작되는 내용을 기록합니다. 훨씬 낮은 수준 (프로그램 함수 호출 대신 시스템 호출)을 제외하고는 본질적으로 대부분의 코드 프로파일 러가 작동하는 방식입니다.
답변
여기에서 몇 가지 좋은 정보를 찾을 수 있습니다.
- Valgrind : 헤비급 동적 이진 계측을위한 프레임 워크
- http://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.wrapping
LD_PRELOAD에 익숙해 지십시오.
답변
Valgrind는 기본적으로 가상 머신입니다. 프로그램을 실행 입니다. 메모리를 할당 / 해제하기 위해 각 호출을 가로채는 가상 아키텍처입니다.