У меня есть программа на Visual C++ 2005. Она падает на компьютере моего клиента с таким сообщением в Application Log'е:
EventID: 0x000003E8 "Faulting application MyApp.exe, version 2.0.0.2, time stamp 0x4babd8fc, faulting module MSVCR80.dll, version 8.0.50727.4016, time stamp 0x49cc5361, exception code 0xc000000d, fault offset 0x00014ba1,
process id 0xd568, application start time 0x01cb28dc2e8366e0."
Я хочу взять MSVCR80.dll, загрузить её в дизассемблер (например IDA) и посмотреть чот находится по этому адресу 0x00014ba1 — возможно это даст мне ключ к пониманию проблемы. Однако у меня нет именно этой версии 8.0.50727.4016; есть версия 8.0.50727.4053. Откуда можно скачать MSVCR80.dll версии 8.0.50727.4016?
Glen
Re: Где достать MSVCR80.dll, version 8.0.50727.4016
Здравствуйте, Glenn, Вы писали:
G>У меня есть программа на Visual C++ 2005. Она падает на компьютере моего клиента с таким сообщением в Application Log'е:
G>EventID: 0x000003E8 "Faulting application MyApp.exe, version 2.0.0.2, time stamp 0x4babd8fc, faulting module MSVCR80.dll, version 8.0.50727.4016, time stamp 0x49cc5361, exception code 0xc000000d, fault offset 0x00014ba1, G>process id 0xd568, application start time 0x01cb28dc2e8366e0."
G>Я хочу взять MSVCR80.dll, загрузить её в дизассемблер (например IDA) и посмотреть чот находится по этому адресу 0x00014ba1 — возможно это даст мне ключ к пониманию проблемы. Однако у меня нет именно этой версии 8.0.50727.4016; есть версия 8.0.50727.4053. Откуда можно скачать MSVCR80.dll версии 8.0.50727.4016?
IMHO, ничего это тебе не даст, даже если все совпадет до последней цифры.
А IDA — это (IMHO) вообще идея из области фантастики.
Я бы рекомендовал просто попросить твоего клиента сделать и прислать тебе крэш дамп (чтобы тебе потом тупо открыть его студией, чтобы увидеть, где упало)
Благо начиная с Vista мега-фича появилась — теперь можно писать дампы, просто добавив ключ реестра
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Glenn, Вы писали:
G>>У меня есть программа на Visual C++ 2005. Она падает на компьютере моего клиента с таким сообщением в Application Log'е:
G>>EventID: 0x000003E8 "Faulting application MyApp.exe, version 2.0.0.2, time stamp 0x4babd8fc, faulting module MSVCR80.dll, version 8.0.50727.4016, time stamp 0x49cc5361, exception code 0xc000000d, fault offset 0x00014ba1, G>>process id 0xd568, application start time 0x01cb28dc2e8366e0."
G>>Я хочу взять MSVCR80.dll, загрузить её в дизассемблер (например IDA) и посмотреть чот находится по этому адресу 0x00014ba1 — возможно это даст мне ключ к пониманию проблемы. Однако у меня нет именно этой версии 8.0.50727.4016; есть версия 8.0.50727.4053. Откуда можно скачать MSVCR80.dll версии 8.0.50727.4016?
bnk>IMHO, ничего это тебе не даст, даже если все совпадет до последней цифры. bnk>А IDA — это (IMHO) вообще идея из области фантастики.
bnk>Я бы рекомендовал просто попросить твоего клиента сделать и прислать тебе крэш дамп (чтобы тебе потом тупо открыть его студией, чтобы увидеть, где упало) bnk>Благо начиная с Vista мега-фича появилась — теперь можно писать дампы, просто добавив ключ реестра :up:
bnk>
bnk>Ну или же "отлаживаться принтфами" по старинке (вести лог)
bnk>Еще вариант, спросить какая у него система, поставить точно такую же у себя на виртуалке, и посмотреть как твоя прога падает.
'А IDA — это (IMHO) вообще идея из области фантастики.' — как раз это мне помогло. Я получил у клиента ту самую версию DLL, открыл её IDA, перешёл на тот адрес fault offset 0x00014ba1 и ясно увидел что дело было в функции wcscpy_s: она получила неправильный аргумент и завершила мою программу в соответствии с правилами принятыми при Parameter Validation. Конечно, я не знаю какой именно из моих вызовов wcscpy_s привёл к проблеме; но это уже некий ключ.
'Благо начиная с Vista мега-фича появилась' — за эту информацию спасибо. А если этая моя программа — сервис, дамп тоже будет записан?
Glen
Re[3]: Где достать MSVCR80.dll, version 8.0.50727.4016
Здравствуйте, Glenn, Вы писали:
G>Конечно, я не знаю какой именно из моих вызовов wcscpy_s привёл к проблеме; но это уже некий ключ.
Ага, точно, еще какой ключ! Теперь ты знаешь, что это косяк в твоей проге, а не в микрософтовской либе, гы-гы-гы
G>'Благо начиная с Vista мега-фича появилась' — за эту информацию спасибо. А если этая моя программа — сервис, дамп тоже будет записан?
Да. Только папка куда файл дампа будет записан для сервиса (по умолчанию) отличается.
Там все написано, RTFM.
Re[3]: Где достать MSVCR80.dll, version 8.0.50727.4016
От:
Аноним
Дата:
02.08.10 07:50
Оценка:
Здравствуйте, Glenn, Вы писали:
G>'А IDA — это (IMHO) вообще идея из области фантастики.' — как раз это мне помогло.
Однако.
dbghelp.lib + SetUnhandledExceptionFilter() для получение дампа памяти при падении, можно же и автоматом его отсылать.
WinDbg (или VS) + debug symbols — для анализа дампа.
Получить дебаг символы для dll проще, чем саму dll найти, и с такой странной версией, к тому же.