Analiza awarii w systemie Windows: co mówi nam komunikat o błędzie?

Niewielkie narzędzie, które zrobiłem do użytku osobistego (napisane w C ++) rozbił się losowo wczoraj (użyłem go mniej więcej 100 godzin bez żadnych problemów) i chociaż normalnie tego nie robię, czułam się trochę żądny przygód i chciałem spróbować dowiedzieć się więcej o problemie. Postanowiłem wejść do Podglądu zdarzeń i zobaczyć, co Windows zalogował o awarii:

Faulting application StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19 
Faulting module name : StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Exception code : 0xc0000005
Fault offset : 0x0002d160,
Faulting process id: 0x17b4
Faulting application start time: time 0x01ca238d9e6b48b9.

Moje pytanie brzmi: co oznacza każda z tych rzeczy i jak mógłbym je wykorzystać do debugowania mojego programu? Oto co wiem do tej pory: kod wyjątku opisuje błąd, a 0xc0000005 to naruszenie dostępu do pamięci (próbowano uzyskać dostęp do pamięci, której nie posiadał). Jestem szczególnie zainteresowany poznaniem następujących rzeczy:

Co oznacza przesunięcie błędu? Czy reprezentuje to miejsce w pliku, w którym wystąpił błąd, czy też oznacza „linię” zespołu, w której wystąpił błąd? Znając przesunięcie błędu, w jaki sposób mogę użyć programu takiego jak OllyDbg, aby znaleźć odpowiedni kod zespołu, który spowodował błąd? Albo - jeszcze lepiej - czy byłoby możliwe (łatwe) określenie, która linia kodu w źródle C ++ spowodowała ten błąd?Jest oczywiste, że znacznik czasu odpowiada 32-bitowemu czasowi UNIX w czasie awarii, ale co oznacza czas rozpoczęcia aplikacji 64-bitowej? Dlaczego miałoby to być 64-bitowe, jeśli znacznik czasu wynosi 32?

Zauważ, że jestem przede wszystkim programistą C ++, więc chociaż wiem coś o montażu, moja wiedza o tym jest bardzo ograniczona. Co więcej, nie jest to poważny problem, który wymaga naprawy (a także nie jest łatwy do odtworzenia, biorąc pod uwagę charakter programu). Używam tego bardziej jako wymówki, aby dowiedzieć się więcej o tym, co oznaczają te komunikaty o błędach. Większość informacji o tych dziennikach awarii, które znalazłem w Internecie, jest zwykle skierowana do użytkownika końcowego, więc nie pomogli mi (jako programistom) bardzo.

Z góry dziękuję

questionAnswers(4)

yourAnswerToTheQuestion