У меня есть клиент, который получает 100% воспроизводимый сбой, который я не могу воспроизвести в моей программе, скомпилированной в Visual Studio 2005. Я отправил им отладочную сборку моей программы и сохранил все файлы PDB и DLL под рукой. Мне прислали файл минидампа, но когда я его открываю, я получаю:
"Необработанное исключение в 0x00000000 в MiniDump.dmp: 0xC0000005: расположение чтения нарушения доступа 0x00000000."
Тогда в стеке вызовов отображается только «0x00000000 ()», а при разборке - дамп памяти в 0x0. Я установил сервер символов, загрузил свои символы PDB и т. Д. Но я не вижу способа узнать, какая из многих библиотек DLL фактически привела к переходу на ноль. Это большой проект с множеством зависимостей, и некоторые из них являются двоичными файлами, для которых у меня нет источника или PDB, поскольку я использую API в качестве стороннего производителя.
Так как же полезен этот минидамп? Как узнать, какая DLL вызвала сбой? Я никогда раньше не использовал мини-дампы для отладки, но все прочитанные мной уроки, по-видимому, по крайней мере отображают имя функции или что-то еще, что дает подсказку в стеке вызовов. Я просто получаю одну строку, указывающую на ноль.
Я также пытался использовать «Зависит», чтобы увидеть, была ли какая-то зависимость от DLL, которая не была разрешена; однако на моих трех тестовых машинах с различными ОС Windows, я, кажется, получаю три разных набора зависимостей ОС DLL (и все же не могу воспроизвести сбой); так что это не кажется особенно надежным методом для диагностики проблемы.
Какие еще методы доступны для определения причины этой проблемы? Есть ли способ сделать шаг назад на одну инструкцию, чтобы увидеть, какая DLL перешла на ноль?