LMDBG on sovellus, jonka avulla havaitsemaan muisti leaksand kaksinkertainen frees. & Nbsp; Toisin kuin muut, LMDBG luo * TÄYNNÄ * stacktracesand erottelee kirjautumisen analyysista thusallowing analysoida sovelluksen per-moduulin pohjalta.
- lmdbg-run on tärkein lmdbg apuohjelma. Se toimii sovellus ja luo lokitiedoston (tai FIFO), jossa kaikki kutsutaan malloc / calloc / realloc / vapaa / memalign / posix_memalign invocations rekisteröidään niiden tulo (tavut laskea, osoitin), lähtö (osoitin) ja (!!! yksilöityähakua ominaisuus !!!) FULL STACKTRACE (osoittimet).
Esimerkki:
& Nbsp; & nbsp; & nbsp; & nbsp; $ Cat testit / test2.c
& Nbsp; & nbsp; & nbsp; & nbsp; #include
& Nbsp; & nbsp; & nbsp; & nbsp; int main ()
& Nbsp; & nbsp; & nbsp; & nbsp; {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; void * p1 = NULL;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; void * p2 = NULL;
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p1 = malloc (555);
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p2 = realloc (p2, 666);
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p2 = realloc (p2, 777);
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; p2 = realloc (p2, 888);
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; return 0;
& Nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; & nbsp; $ Gcc -O0 -g -o _test2 testit / test2.c
& Nbsp; & nbsp; & nbsp; & nbsp; $ Lmdbg-run -o _Loki ./_test2
& Nbsp; & nbsp; & nbsp; & nbsp; $ Cat _Loki
& Nbsp; & nbsp; & nbsp; & nbsp; malloc (555) -> 0xbb901400
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5b03
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048738
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (NULL, 666) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804874e
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901800, 777) -> 0xbb901c00
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048764
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901c00, 888) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804877a
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; $
HUOMAA: Täysi stacktrace voit analysoida hakemuksesi, eli voit havaita, mitä lohkoja / komponentit vaativat enemmän muistia kuin toiset ja miksi. lmdbg-sym on erittäin tärkeä väline tähän, katso alla.
- lmdbg-vuodot analysoi lokitiedosto syntyy lmdbg-run ja tuotos kaikki löydetyt muistivuotokuvioista
Esimerkki:
& Nbsp; & nbsp; & nbsp; & nbsp; $ Lmdbg-vuodot _Loki & nbsp; & nbsp;
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901c00, 888) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804877a
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; malloc (555) -> 0xbb901400
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5b03
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048738
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; $
- lmdbg-sym muuntaa osoitteet source.c: 999, jos se on mahdollista
Esimerkki (gdb (1) on toiminnassa):
& Nbsp; & nbsp; & nbsp; & nbsp; $ Lmdbg-sym ./_test2 _Loki
& Nbsp; & nbsp; & nbsp; & nbsp; malloc (555) -> 0xbb901400
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5b03
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048738 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 8 main
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (NULL, 666) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804874e & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 9 main
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901800, 777) -> 0xbb901c00
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048764 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 10 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; tärkein
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901c00, 888) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804877a & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 11 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; tärkein
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; $
Esimerkki (addr2line (1) toimii tässä):
& Nbsp; & nbsp; & nbsp; & nbsp; $ Lmdbg-sym -a ./_test2 _Loki
& Nbsp; & nbsp; & nbsp; & nbsp; malloc (555) -> 0xbb901400
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5b03
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048738 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (NULL, 666) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804874e & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 9
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901800, 777) -> 0xbb901c00
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048764 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 10
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901c00, 888) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804877a & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 11
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; $
- lmdbg-sysleaks - greps tai ohittaa järjestelmän muistia vuotoja löytyy libc, libdl, C ++ STL jne Katso testejä / lmdbg * conf tiedostot. Oletuksena config tiedostot ovat: ~ / .lmdbg.conf ja /etc/lmdbg.conf
- lmdbg = lmdbg-run + lmdbg-vuodot + lmdbg-sym + lmdbg-sysleaks
Eli lmdbg on all-in-one korkeamman tason työkalu.
Esimerkki:
& Nbsp; & nbsp; & nbsp; & nbsp; $ Lmdbg -v -o _Loki ./_test2
& Nbsp; & nbsp; & nbsp; & nbsp; Muisti vuotoja havaittiin ja tallennetaan tiedostoon "_Loki"
& Nbsp; & nbsp; & nbsp; & nbsp; $ Cat _Loki
& Nbsp; & nbsp; & nbsp; & nbsp; realloc (0xbb901c00, 888) -> 0xbb901800
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5a37
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x804877a & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 11 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; tärkein
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; malloc (555) -> 0xbb901400
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe58e8
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0xbbbe5b03
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048738 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; testejä / test2.c: 8 main
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x8048584
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0x80484e7
& Nbsp; & nbsp; & nbsp; & nbsp; $
Mitä uutta strong> tässä julkaisussa:
- lmdbg-sym enää segfaults ongelmien vuoksi stacktrace (3).
- paljon yksinkertaisempi ja oikea osoite muunnosmenetelmä lisättiin.
- Oli merkittävää speedups johtuu optimointeja gdb.
- lmdbg aikavälillä glibc malloc koukut ei enää käytetä.
- lmdbg oma koodi ei sisälly stacktraces.
- Uusi -N vaihtoehto lisättiin, ja -v vaihtoehto sai pieniä fix.
- lmdbg-stat sai korjauksia NULL dereference joka ilmestyi jos ilmainen (3) tai realloc (3) stacktrace eteen sopiva malloc / realloc (3) stacktrace.
- Oli muita pieniä korjauksia ja parannuksia, parannuksia regressiotestien ja parannuksia stacktrace (3).
Mitä uutta strong> versiossa 1.1.0:
- fix regressiotestit.
- lmdbg-run: nolla-osoitteet poistetaan stacktraces tuottamat glibc n backtrace (3).
- Tämä korjaa väittää in lmdbg-stat (1).
- Double & quot; 0x & quot; kysymykset & quot; info kohta & quot; kiinnitettiin (nähty NetBSD).
- backtrace (3) libexecinfo (jos käytettävissä) sijasta käytetään sisäänrakennettu toteuttamiseen.
- lmdbg-sym: muutamia virheitä fiksattiin muuntaminen osoitteita symbolia.
- lmdbg-stat: epätäydellisesti lukea rivit nyt huomiotta, joten ei ole enää vedota (3) s, kun hakemuksen debugged tapetaan.
- vaihtoehto täytäntöönpanoa kirjoitettu awk poistettiin.
Mitä uutta strong> versiossa 0.17.0:
- Tämä versio tuo paljon parannuksia ja korjauksia ohjesivuja, uusia valmiuksia lmdbg, lmdbg-run, ja lmdbg-sym, ja pieniä korjauksia lmdbg-stat.
- lmdbg on nyt meta työkalu, joka pystyy tekemään paljon enemmän asioita, eikä vain löytää muistivuodot.
Mitä uutta strong> versiossa 0.15.1:
- Hankinnat calloc (3) kutsumisessa on pois käytöstä glibc-pohjaiset järjestelmät (Linux, GNU / kfreebsd, ja ehkä muut) koska lmdbg-sarja ei niitä.
- Minor siivouksen, korjauksia, ja parannuksia. mk-configure & gt; = 0,20 vaaditaan rakennus.
Mitä uutta strong> versiossa 0.14.0:
- Uudet työkalut: lmdbg-stat, lmdbg-grep ja lmdbg lajitella ja analysoimalla tilastotietoa muistiallokointi.
- lmdbg-run: uusia vaihtoehtoja lmdbg-run: -S ja -M tuottamiseksi lyhentää stacktraces.
- lmdbg-sym: uusi vaihtoehto -p saamiseksi ohjelman nimen lmdbg aikavälillä tuotoksen.
- fix: 'mkcmake testi "poistaa väliaikaiset tiedostot.
Kommentteja ei löytynyt