Wycieki pamieci i ich wykrywanie pod Builder C++
Narzedziem, ktore pozwala na wykrywanie i rozwiazywanie problemow zwiazanych z wyciekami pamieci (alokacja blokow pamieci z zastosowaniem slowa kluczowego new), wystepujacymi podczas programowania z zastosowaniem srodowiska IDE Borland Builder C++ 5.0 i 6.0, jest tzw CodeGuard.
CodeGuard oryginalnie napisany zostal dla aplikacji 16 bitowych i dopiero wersja 5.0 Buildera C++ zostala wyposazona w pelni funkcjonalna wersje CodeGuard 32 bit. Zadaniem CodeGuard jest dynamiczne sledzenie zasobow pamieci, jej przydzielania nowym obiektom, alokowania i zwalniania za pomoca slow kluczowych delete oraz delete [].
CodeGuard wlaczamy w opcjach danego projektu. Sciezka dostepu jest nastepujaca:
Po wlaczeniu CodeGuard mozna przetestowac jego dzialanie na tym prostym przykladzie.
Tworzymy standardowa aplikacje i dodajemy guzik na glownym formularzu, nastepnie wpisujemy prosta metode obslugi guzika, gdzie tworzymy celowy wyciek pamieci.
Dwukrotne klikniecie na druga linijke przenosi nas do linii kodu odpowiedzialnej na wyciek pamieci.
UWAGA!!! CodeGuard uruchomiony w tle spowalnia wykonanie programu. Nalezy sie z tym liczyc przy wykonywaniu wiekszych programow wykonujacych duza liczbe obliczen.
CodeGuard oryginalnie napisany zostal dla aplikacji 16 bitowych i dopiero wersja 5.0 Buildera C++ zostala wyposazona w pelni funkcjonalna wersje CodeGuard 32 bit. Zadaniem CodeGuard jest dynamiczne sledzenie zasobow pamieci, jej przydzielania nowym obiektom, alokowania i zwalniania za pomoca slow kluczowych delete oraz delete [].
CodeGuard wlaczamy w opcjach danego projektu. Sciezka dostepu jest nastepujaca:
Project->Options->CodeGuard(zakladka)->CodeGuardValidation
Po wlaczeniu CodeGuard mozna przetestowac jego dzialanie na tym prostym przykladzie.
Tworzymy standardowa aplikacje i dodajemy guzik na glownym formularzu, nastepnie wpisujemy prosta metode obslugi guzika, gdzie tworzymy celowy wyciek pamieci.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned int * iVar0 = new unsigned int [100];
}
Projekt kompilujemy, klikamy kilka razy guzik i program zamykamy. Po zamknieciu programu, wyswietlone zostaje okno CodeGuard ze wskazaniem wycieku pamieci. Lista danych zawiera miedzy innymi opis bledu oraz rozmiar wycieku i potencjalne zrodlo wycieku z jego dokladnym umjescowieniem w kodzie programu np:
{
unsigned int * iVar0 = new unsigned int [100];
}
The Object array (0x00E4750) [size:400bytes] was created with new ()
TForm1:Button1Click(const System::TObject*)
Dwukrotne klikniecie na druga linijke przenosi nas do linii kodu odpowiedzialnej na wyciek pamieci.
UWAGA!!! CodeGuard uruchomiony w tle spowalnia wykonanie programu. Nalezy sie z tym liczyc przy wykonywaniu wiekszych programow wykonujacych duza liczbe obliczen.
Autorem tekstu jest:
Marek Hajduczenia
Materiał dodany przez użytkownika: marek_haj
