Небольшая утилита, которую я сделал для личного использования (написанная на С++), вчера разбилась случайным образом (я использовал ее примерно через 100 часов без каких-либо проблем), и, хотя я обычно этого не делаю, я был чувствовал себя немного предприимчивым и хотел попробовать и узнать больше о проблеме. Я решил пойти в Средство просмотра событий и посмотреть, что Windows зарегистрировала об аварии:
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.
Мой вопрос в том, что означает каждая из этих вещей, и как я буду использовать их для отладки моей программы? Вот то, что я знаю до сих пор: код исключения описывает ошибку, а 0xc0000005 - нарушение доступа к памяти (пытался получить доступ к памяти, которой он не принадлежал). Мне особенно интересно узнать больше о следующем:
- Что означает смещение ошибки? Означает ли это местоположение в файле, где произошла ошибка, или это означает "строка" сборки, где произошла ошибка? Зная смещение ошибки, как использовать программу OllyDbg для поиска соответствующего кода сборки, вызвавшего ошибку? Или - еще лучше - было бы (легко) определить, какая строка кода в источнике С++ вызвала эту ошибку?
- Очевидно, что метка времени соответствует 32-битовому времени UNIX во время сбоя, но что означает время начала 64-битного приложения? Почему это будет 64-бит, если метка времени равна 32?
Обратите внимание, что я в первую очередь программист на С++, поэтому, хотя я знаю кое-что о сборке, мои знания об этом очень ограничены. Кроме того, это действительно не является серьезной проблемой, которая нуждается в исправлении (и также нелегко воспроизвести, учитывая природу программы), я просто использую это больше как оправдание, чтобы узнать больше о том, что означают эти сообщения об ошибках. Большая часть информации об этих журналах сбоев, которые я нашел в Интернете, обычно нацелена на конечного пользователя, поэтому они не очень помогли мне (как программисту).
Заранее спасибо