Din când în când, indiferent de cât de mult efort este cheltuit pe depanare și testare, programul va scădea în continuare. Și nu se încadrează într-un mediu de testare sau de pe calculatorul dumneavoastră de dezvoltare, și asigurați-vă că utilizatorul final. În acest caz, ar fi frumos să știu de ce loc programul nu a reușit. Aici, apoi vine în ajutorul și API pentru Windows Debugging, mai degrabă biblioteca Dbghlp, cu care puteți crea minidumps.
Ce este un minidump? De regulă, cei care l-au citit deja știu ce este, dar totuși, repet :). Minidump este un fișier binar care conține informații despre starea programului, la un anumit moment, în acest caz, la momentul căderii. În cazul nostru, acest lucru se va minidumps starea registrelor CPU, stiva de apel în program a dus la căderea acestuia, precum și un cod de eroare și cauza căderii.
În DbgHlp există o astfel de mare MiniDumpWriteDump caracteristică. vă permite să înregistrați un program în fișierul de imagine memorie. Mai mult, a prezentat o soluție la cheie (cod) create folosind această funcție, groapa de program. Codul din pură C, nakakogo C ++ (dar, desigur, în proiectul de program în C ++ cod care este ușor de utilizat). Deci, primul fișier antet DebugHelplers.h):
Și acum DebugHelplers.c realizare:
Vă rugăm să rețineți, în dosarul de punere în aplicare, linia 1, este conectată antet targetver.h - acest fișier ar trebui să conțină o definiție a program_name macro. necesare pentru formarea unui nume de fișier pentru a dump programul specific. Ce vreau să spun? Nu e ușor, dar foarte simplu - dacă aveți o decizie (soluție) are o mulțime de proiecte (exe), care este necesar pentru a forma gropile convenabil (pentru a evita duplicarea de cod), pentru a face toate dependente de context (în acest caz, numele programului) să efectueze în fișier de specificul unui anumit proiect, și apoi conectați-l în fiecare proiect propriu. Un exemplu de un astfel de fișier targetver.h pentru cazul nostru:
Acest cod, în programul de toamna (excepție netratată), va genera un fișier de imagine prg.exe.dmp. care vor fi înregistrate în același director ca și fișierul executabil. După cum puteți vedea, prg, a determinat targetver.h și convenabil de a face această definiție egală cu numele programului. Cum să-l folosească? Foarte simplu - iată un exemplu:
La începutul principal funcției, trebuie să instalați handler (TopLevelFilter) toate prime, pe un program de excepție. Acest lucru se face folosind funcția SetUnhandledExceptionFilter (definită în Winbase.h). Este convenabil de a face acest lucru numai în final (non-debug) versiuni ale programului (de unde și compilarea instalației de tratare condiționată) t. Pentru a. În versiunea de depanare este mult mai bine decât atunci când excepție netratată a invocat depanatorul, și nu pentru a genera un Minidump.