Létrehozása minidumps blog

Időről időre, nem számít, hogy mennyi erőfeszítést költenek hibakeresés és tesztelés, a program továbbra is csökken. És nem esik tesztkörnyezetben vagy a fejlesztés számítógépet, és ellenőrizze, hogy a végfelhasználó. Ebben az esetben jó lenne tudni, hogy honnan, milyen helyet a program nem sikerült. Itt aztán jön a támogatás és a Windows-hibakeresés API, hanem Dbghlp könyvtár, mellyel létrehozhat minidumps.

Mi a minidump? Általános szabály, hogy azoknak, akik olvasták már tudom, mi ez, de mégis, ismétlem :). Minidump egy bináris fájl, amely információkat tartalmaz az állam a program egy adott időpontban, ebben az esetben idején az ősszel. Esetünkben ez minidumps állam a CPU regiszterek, call stack a programban vezetett a bukásához, valamint egy hibakódot és az oka az ősszel.

A DbgHlp van egy ilyen nagyszerű funkció MiniDumpWriteDump. lehetővé teszi, hogy rögzítse a program kiírása. Továbbá benyújtott egy kulcsrakész megoldás (kód) ezzel a funkcióval létrehozott, a program kiírása. A kód tiszta C, C ++ nakakogo (de természetesen a tervezet program C ++ kódot, ami könnyen kezelhető). Tehát először DebugHelplers.h header fájl):

És most a megvalósítás DebugHelplers.c:

Felhívjuk figyelmét, hogy a végrehajtási fájlt, 1. sor, csatlakozik fejléc targetver.h - ezt a fájlt kell tartalmaznia meghatározását program_neve makró. kialakulásához szükséges a fájlnév kiírása az adott programot. Mit jelent? Ez nem könnyű, de nagyon egyszerű - ha van egy határozat (Solution) van egy csomó projekt (exe) ami szükséges alkotnak guba, kényelmes (hogy elkerüljék a párhuzamos kód), hogy minden kontextusfüggő (ebben az esetben a program nevét), hogy végezzen iratai a sajátosságait egy adott projekt, majd dugja be az egyes projektek saját. Egy példa az ilyen targetver.h fájl esetünkben:

Ez a kód, az ősszel a program (nem kezelt kivétel), generál memóriaképfájlt prg.exe.dmp. amely rögzítésre kerül ugyanabban a könyvtárban, mint a futtatható fájlt. Mint látható, prg, ez határozza meg targetver.h és kényelmes, hogy nem ez a definíció megegyezik a program nevét. Hogyan kell használni? Nagyon egyszerű - itt egy példa:

Az elején a funkció fő, telepíteni kell a felvezető (TopLevelFilter) minden nyers, kivételes programot. Ezt használja SetUnhandledExceptionFilter funkció (meghatározott Winbase.h). Célszerű, hogy ezt csak a végső (nem hibakeresés) programverzióra (innen a feltételes fordítási felvezető telepítés) t. Hogy. A hibakereső verzió sokkal jobb, mint ha nem kezelt kivétel hivatkoztak a hibakereső és nem generál minidump.

Kapcsolódó cikkek