Сгенерированный локально мини-дамп загружен, но удаленно сгенерированный не может загрузить стек вызовов и символы

Мое приложение Windows использует SEH и SetUnhandledExceptionFilter создать минидамп при аварии. Я уже успешно использовал его для отладки ошибок сегментации, которые происходят на стороне клиента. И. е. Я получаю дамп, собираю ту же версию программы локально, что и ту, которая создала дамп, открываю ее и вижу некоторые записи и источники стека вызовов.

Тем не менее, теперь у меня есть дамп, который был вызван std::exception а не сегфо В дополнение к обработчику SEH у меня также есть простой C ++ catch блок, который выглядит так:

catch (std::exception& e)
{
Logger() << "std::exception caught:" << e.what();
throw;
}

Мини-дамп также генерируется для исключений. Когда генерируется локально, его можно открыть, и я сразу вижу, где было сгенерировано исключение — загружены PDB, доступен стек вызовов, также загружены источники. НО, когда я открываю удаленно сгенерированный дамп, я почти ничего не получаю. Единственная запись стека вызовов KERNELBASE.dll!_RaiseException@16()источники не загружаются и т. д. И странная часть заключается в том, что пользовательский интерфейс Visual Studio отличается для дампа исключений и для дампа segfault. При загрузке дампа segfault обычно говорится, что такой-то и такой-то .pdb не может быть найден; Я могу просмотреть его и загрузить все после. За исключением дампа, буквально нет способа сделать это.

Итак, как я могу загрузить свой мини-дамп и увидеть сайт возникновения исключений?

1

Решение

Попробуйте перестроить свое приложение, сохраните файлы .pdb и предоставьте клиенту это приложение. Когда произойдет новый сбой, проверьте дамп-файл с сохраненными файлами .pdb.

Короче говоря, вы должны хранить все файлы .pdb для каждой версии приложения, которое вы предоставляете. Такая вещь как SymStore был изобретен для этой цели.

1

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


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