как получить callstack в выпущенном приложении при использовании _set_purecall_handler

Мой код иногда запускается с ошибкой «чистого вызова функции», поэтому я использую _set_purecall_handler для регистрации обработчика. В режиме отладки я могу получить полный стек вызовов, используя StackWalker, но в режиме выпуска StackWalker показывает мало полезной информации. Я пытаюсь использовать MiniDumpWriteDump и установить ExceptionPointers = NULL. После сбоя я получил файл дампа, но я не могу его отладить и показать:
Указанный шаблон не может быть найден. Пожалуйста, проверьте, что полный путь указан правильно.
Есть ли способ получить информацию из выпущенного приложения в такой ситуации?

0

Решение

Обычно можно угадать метод, вызываемый путем сопоставления виртуальной таблицы подкласса с классом абстрактной — виртуальная таблица абстрактного класса имеет набор обработчиков pure_call для виртуальных функций без реализации.

Все, что вам нужно знать о вызове метода, находится в стеке и в регистрах — просто посмотрите на разборку сайта вызова, обратите внимание на смещение, используемое для извлечения функции из vtable, дамп фактической vtable умершего объекта — вы можете посмотреть это путем разборки кода для конструктора, ищущего `vftable’s. Затем простой осмотр с ДДС должен предоставить всю информацию, которая вам нужна, чтобы знать, какой метод был вызван (но не почему объект пропал: o)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]