Мой код иногда запускается с ошибкой «чистого вызова функции», поэтому я использую _set_purecall_handler для регистрации обработчика. В режиме отладки я могу получить полный стек вызовов, используя StackWalker, но в режиме выпуска StackWalker показывает мало полезной информации. Я пытаюсь использовать MiniDumpWriteDump и установить ExceptionPointers = NULL. После сбоя я получил файл дампа, но я не могу его отладить и показать:
Указанный шаблон не может быть найден. Пожалуйста, проверьте, что полный путь указан правильно.
Есть ли способ получить информацию из выпущенного приложения в такой ситуации?
Обычно можно угадать метод, вызываемый путем сопоставления виртуальной таблицы подкласса с классом абстрактной — виртуальная таблица абстрактного класса имеет набор обработчиков pure_call для виртуальных функций без реализации.
Все, что вам нужно знать о вызове метода, находится в стеке и в регистрах — просто посмотрите на разборку сайта вызова, обратите внимание на смещение, используемое для извлечения функции из vtable, дамп фактической vtable умершего объекта — вы можете посмотреть это путем разборки кода для конструктора, ищущего `vftable’s. Затем простой осмотр с ДДС должен предоставить всю информацию, которая вам нужна, чтобы знать, какой метод был вызван (но не почему объект пропал: o)
Других решений пока нет …