Как отловить КАЖДОЕ исключение в C ++ / Windows? - PullRequest
1 голос
/ 27 мая 2011

У меня есть DLL, которая вставляется в очень старую, глючную и теперь не поддерживается приложением разработчика.Иногда это приложение вылетает, и мне нужен какой-то способ, чтобы перехватить буквально все необработанные исключения (из DLL), которые могут возникнуть, чтобы сохранить данные и только потом позволить приложению аварийно завершиться.Как мне этого добиться?

На данный момент для этой цели существует внешний отладчик, но он слишком медленный и тоже глючит, чтобы сохранить его таким образом.

1 Ответ

10 голосов
/ 27 мая 2011

Вы должны начать новый процесс, в котором размещается DLL.Если DLL выйдет из строя, она остановит процесс, нравится вам это или нет.Конечно, вы можете попытаться поймать исключение или что-то в этом роде, но если выдается исключение, это означает, что память повреждена. Лучше катастрофически аварийно завершить работу, чем продолжать выполнение программы в несовместимом состоянии.

Оболочка Windows - это программа, которая фактически делает это - она ​​запускает некоторые плагины в суррогатном режимепроцесс, так что если плагин падает, он не разрушает всю оболочку.Вам нужно будет использовать межпроцессное взаимодействие, чтобы общаться между собой и суррогатом, которого вы начинаете.

...