glibc: Verzió 2.1
gdb) és az ún. trace segédprogramok (mint az
strace és ltrace) használatán kívül ezáltal további lehetőségek érhetők el.
A glibc kézikönyvében ezek a területek dokumentálva vannak. Minden esetre néhány referencia a kézikönyvben redundáns információkat idézhet elő. Minden egyéb esetben ez a cikk az egyetlen elfogadható információforrás.
free függvény által, vagy ha a lefoglalt hely egyetlen bájttal is túl van töltve.
Éppen ezért ez a lehetőség fennáll a hibakeresésnél is.
Csak a tisztázás kedvéért: a szegmentációs hiba az alábbi memóriafoglaló rutinok egyikéből származik:
__free vagy chunk_alloc és minden esetben azok rossz felhasználása által.
Éppen ezért nem minden esetben nyilvánvaló a hiba a malloc függvényekben, inkább (a legtöbb esetben ;-)) a programban van a
hiba.
A szegmentálási hibákon túl a glibc számos eszközt tartalmaz a memóriafoglalással kapcsolatos problémák nyomkövetésében. Mindenesetre a legtöbb eszköz ezek közül a program újrafordítását igényli.
MALLOC_CHECK_ környezeti változó beállításával (az
utolsó aláhúzásjel nagyon fontos és nem hagyható el),
lehetősége van a
malloc, realloc és a free hibakeresésére.
Ha a MALLOC_CHECK_ már be van állítva,
egy speciális (de kevésbé hatékony) implementációja kerül felhasználásra az előbbi függvényeknek.
Ez lehetővé teszi az egyszerűbb hibák felismerését, úgymint a free ismételt meghívását azonos paraméterrel,
vagy az egybájtos túlfutást ("off-by-one" hibák). Mindenesetre ez a módszer nem nyújt garantált védelmet a hibák ellen, és memória rések
keletkezhetnek általa.
Ha a MALLOC_CHECK_ értéke 0, minden felismert heap hiba figyelmen kívül marad, regisztrálás nélkül.
Ha a változó értéke 1, az üzenetek kiíródnak az stderr-re. Ha értéke, az abort függvény azonnali végrehajtásra
kerül. Ez nagyon hasznos lehet, mivel a többszöri rendszerfagyás gyakran nehezíti az ilyen fajta hibák nyomon követését.
További lehetőség a speciális memória ellenőrzések fordítása a programba.
A részletek miatt olvassa el a glibc kézikönyvét (amelyek a info libc "Heap Consistency Checking" fejezetben találhatók).
malloc és free hívásokat (az indirekt hívásokon kívül).
A Glibc tartalmaz erre egy eszközt mtrace néven, amely az automatikus keresést is lehetővé teszi.
Az eszköz részletes ismertetése megtalálható a glibc kézikönyvében. Gyors segítségül adja ki a következő parancsot:
info libc "Allocation Debugging".
catchsegv paranccsal. Egyszerűen adja meg a catchsegv program paramétereként a hibás program nevét:
pl., catchsegv buggy.
Az <execinfo.h> program backtrace funkciója használható a verem ellenőrzésére
a saját programokban.
LD_DEBUG környezeti változóban.
Az opciók listája kiíratható, ha az LD_DEBUG
értéke help. Például az LD_DEBUG=help ls
kimenete (magyar fordításban :-)):
Az LD_DEBUG környezeti változó értékei a következők lehetnek: bindings a szimbólumkapcsolatok megjelenítése files a fájlműveletek és a programkönyvtárak megjelenítése help a súgó megjelenítése és kilépés libs a programkönyvtárak keresési útvonalának megjelenítése reloc az áthelyezési művelet megjelenítése symbols a szimbólumtáblán végzett műveletek megjelenítése versions a verzió függőségek megjelenítése Hogy átirányíthassa a kimenetet egy fájlba az alapértelmezett kimenet helyett, egy kimeneti fájl nevét adhatja meg az LD_DEBUG_OUTPUT környezeti változóban.Ha egynél több paramétert kíván használni, válassza el őket vesszőkkel, pl.
LD_DEBUG=files,libs program.
Az ldd program kiírja egy program vagy programkönyvtár által igényelt összes többi programkönyvtár listáját.
SDB-aj_debug)