У меня есть файл дампа, который мне удалось создать, из моей DLL, которая создается для любого необработанного исключения.
Когда я сделал что-то вроде int* tt = new int[4]; return int[n];
при n = 4 я бы получил файл дампа, мог бы открыть его и посмотреть, на какой строке выдается ошибка. Это было возможно как непосредственно из выпуска exe, так и из выпуска DLL.
Теперь это была простая ошибка, и я только ввел ее, чтобы проверить создание своего дампа памяти.
Теперь у меня есть файл дампа 900 КБ, и в журнале событий говорится, что ошибка произошла из моего .DLL, но если я открою файл, он не отобразит никакого исходного кода.
Стек вызовов
KERNELBASE.dll! RaiseException () + 0x3d байт
clr.dll! RaiseTheExceptionInternalOnly () + 0x18f байт
clr.dll! IL_Throw () + 0xe2 байта
000007fe81f65fd7 ()
00000000034d1610 ()
000000002d06ecb8 ()
436f93ce00050011 ()
436f93cf00110012 ()
000000002d06ec50 ()
00006d930c4f7680 ()
clr.dll! InlinedCallFrame :: `vftable ‘()
000000002d06f3d8 ()
что совершенно не помогает мне понять, откуда в DLL происходит моя ошибка.
Другая проблема с отладкой заключается в том, что это происходит только на live-ПК, но никогда на моей системе отладки. Может кто-нибудь помочь мне найти способ отладки этого? Кажется, это происходит при вызове DLL, но: не каждый раз, только как каждый второй раз (иногда с 1-й попытки, иногда с 5-й). Я полностью потерялся в том, что здесь происходит.
Редактировать:
Обновлен стек вызовов с загруженными символами Microsoft, но я до сих пор не знаю, откуда это может исходить.
Вам нужно загрузить символы для kernelbase.dll. И, возможно, clr.dll.
Предположительно вы используете визуальную студию?
Настройте его для доступа к символам с сервера символов Microsoft: http://msdn.microsoft.com/en-us/library/b8ttk8zy(v=vs.80).aspx
Возможно, вам придется щелкнуть правой кнопкой мыши по элементам в стеке вызовов и сказать ему загружать символы.
Кроме того, обязательно сохраняйте копию файла pdb для всех выпусков программного обеспечения, которые вы делаете.
Других решений пока нет …