2009-11-01 8 views

Odpowiedz

90

Valgrind zasadniczo uruchamia aplikację w "piaskownicy". Działając w tym obszarze izolowanym, jest on w stanie wstawić własne instrukcje do zaawansowanego debugowania i profilowania.

Z instrukcji:

Program jest następnie uruchomić na syntetycznym CPU dostarczonych przez rdzeń Valgrind. Gdy nowy kod jest wykonywany po raz pierwszy, rdzeń podaje kod do wybranego narzędzia. Narzędzie dodaje do tego swój własny kod oprzyrządowania i przekazuje wynik do rdzenia, który koordynuje dalsze wykonywanie tego oprzyrządowanego kodu.

W zasadzie valgrind zapewnia wirtualny procesor, który wykonuje twoją aplikację. Jednak przed przetworzeniem instrukcji aplikacji są one przekazywane do narzędzi (takich jak memcheck). Narzędzia te są podobne do wtyczek i mogą modyfikować aplikację przed uruchomieniem na procesorze.

Wspaniałą cechą tego podejścia jest to, że nie trzeba modyfikować ani ponownie łączyć programu, aby uruchomić go w valgrind. Powoduje to, że twój program działa wolniej, jednak program valgrind nie jest przeznaczony do mierzenia wydajności lub uruchamiania podczas normalnej pracy aplikacji, więc nie stanowi to problemu.

+2

Artykuł Julian Seward rozszerza się nieco od wykonania Valgrind: http://courses.cs.washington.edu/courses/cse326 /05wi/valgrind-doc/mc_techdocs.html – user11171

3

valgrind siedzi jako warstwa pomiędzy twoim programem i systemem operacyjnym, przechwytuje połączenia do pamięci systemu operacyjnego (de) i rejestruje to, co jest manipulowane przed faktycznym przydzieleniem pamięci i zwrotem odpowiednika. Zasadniczo działa większość programów profilujących, z wyjątkiem znacznie niższego poziomu (wywołania systemowe zamiast wywoływania funkcji programowych).

2

Valgrind jest w zasadzie maszyną wirtualną , która wykonuje twój program. Jest to architektura wirtualna przechwytująca każde wywołanie w celu przydzielenia/zwolnienia pamięci.

23

Valgrind to narzędzie dynamicznej analizy binarnej (DPA), które wykorzystuje dynamiczną strukturę oprzyrządowania (DPI) do sprawdzania alokacji pamięci, wykrywania zakleszczeń i profilowania aplikacji. Framework DPI ma swój własny menedżer pamięci o niskim poziomie, program planujący, program obsługi wątków i moduł obsługi sygnału. Pakiet narzędzi Valgrind obejmuje narzędzie takie jak:

  1. Memcheck - dynamicznie śledzi przydzielanie pamięci i sygnalizuje wycieki pamięci.
  2. Helgrind - wykrywa i zgłasza martwe blokady, potencjalne wyścigi danych i cofnięcia blokady.
  3. Cachegrind - symuluje interakcje aplikacji z pamięcią podręczną systemu i dostarcza informacji o chybionych pamięciach podręcznych.
  4. Nulgrind - prosty valgrind, który nigdy nie przeprowadza żadnej analizy. Używana przez programistów do testowania wydajności.
  5. Masyw - narzędzie do analizy użycia pamięci sterty aplikacji.

Narzędzie Valgrind wykorzystuje mechanizm dezasemblacji i resyntezjalizacji, w którym ładuje aplikację do procesu, dezasembluje kod aplikacji, dodaje kod oprzyrządowania do analizy, łączy go z powrotem i wykonuje aplikację. Używa Just Intime Compiler (JIT) do osadzenia aplikacji z kodem oprzyrządowania.

   Valgrind Tool = Valgrind Core + Tool Plugin 

Valgrind Core demontuje kod aplikacji i przekazuje fragment kodu do wtyczki narzędziowej dla oprzyrządowania. Wtyczka narzędzia dodaje kod analizy i montuje go z powrotem. W ten sposób Valgrind zapewnia elastyczność tworzenia własnego narzędzia na bazie ram Valgrind. Valgrind używa rejestrów cienia i pamięci cienia do instrukcji odczytu/zapisu instrumentu, odczytu/zapisu wywołania systemowego, alokacji stosu i sterty.

Valgrind zapewnia opakowania wokół wywołania systemowego i rejestruje wywołania zwrotne przed i po każdym wywołaniu systemowym w celu śledzenia pamięci dostępnej w ramach wywołania systemowego. Tak więc Valgrind jest warstwą abstrakcji systemu operacyjnego między systemem operacyjnym Linux a aplikacją kliencką.

Schemat 8 ilustruje etapy Valgrind:

8 phases of Valgrind

+0

proszę dać mi znać źródło tych informacji lub link zawierający te dane? dzięki. – mezda

+1

Tutaj idziesz .. http://valgrind.org/docs/valgrind2007.pdf –