Получение функции для адреса DLL после сбоя - PullRequest
1 голос
/ 19 сентября 2010

Я знаю, что при сбое приложения система сообщает о сбое в расположении 0x00004b79 в mydll.dll.У меня есть исходный код, и у меня есть двоичный файл, но у меня нет PDB или каких-либо файлов списков из сборки этой DLL.

Сбой повторяется, но я не могу установить отладчикна рабочей машине, и сбой не происходит в средах разработки или отладки.Я настроил Dr. Watson, у меня есть аварийный дамп и файл журнала Dr. Watson.

Файл журнала Dr. Watson содержит эту разборку для выполняемой функции:

        10604b70 8b442408         mov     eax,[esp+0x8]
        10604b74 8b542404         mov     edx,[esp+0x4]
        10604b78 50               push    eax
FAULT ->10604b79 8b4120           mov     eax,[ecx+0x20]    ds:0023:00000020=????????
        10604b7c 52               push    edx
        10604b7d 6801800000       push    0x8001
        10604b82 50               push    eax
        10604b83 ff156c946210 call dword ptr [mydll!DllUnregisterServer+0x1720c (1062946c)]
        10604b89 c20800           ret     0x8

(инструкции INT 3 предшествуют и следуют приведенному выше фрагменту сборки.)

Трассировка стека включает только адрес mydll + 0x4b79.Он не дает никакой информации о вызывающем абоненте.

Загрузка аварийного дампа в windbg не предоставила никакой дополнительной информации.

Как определить, в какой функции (или даже лучше, в какой строкекода) произошел сбой?

1 Ответ

2 голосов
/ 19 сентября 2010

Создайте аварийный дамп вашего приложения и проверьте его с помощью отладчика. WinDbg - очевидный выбор здесь. Аварийный дамп даст вам трассировку стека и подробную информацию об ошибке.

Редактировать: Что касается невозможности установить отладчик, DrWatson предустановлен и может генерировать аварийные дампы, которые затем можно проверить на другом компьютере.

...