| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Access Violation |
| Автор: CPlusPlusFAN 26.2.2008, 15:35 |
| Запускаю стороннее приложение через CreateProcess. Это приложение может вызвать Access Violation. Нужно перехватить эту ситуацию во избежание вывода окна "Отправлять/неотправлять отчёт" и вывести сообщение об ошибке. Можно привести пример? ЗЫ У меня программа запускает сотни других программ и закрывать за ними окна вполне геморройно. |
| Автор: BorisVorontsov 26.2.2008, 20:46 |
| Инжект библиотеки с установкой фильтра исключений -- SetUnhandledExceptionFilter |
| Автор: CPlusPlusFAN 26.2.2008, 21:10 |
| А можно немного поподробней, а то я в первый раз с этим сталкиваюсь. |
| Автор: dumb 27.2.2008, 04:20 | ||
| для таких случаев удобно использовать отладку(флаг DEBUG_PROCESS). обработка исключения при подключенном отладчике(отладчиком в данном случае является наша запускающая программа) происходит в несколько этапов:
пример запуска с отладкой("http://msdn2.microsoft.com/en-us/library/ms681675.aspx" - в комментариях написано, что по идее должно быть сделано отладчиком):
|
| Автор: CPlusPlusFAN 28.2.2008, 22:39 |
| Столкнулся с такой проблемой: созданный поток, выполнение которого описано выше, отказывается работать. Вот как прога должна работать: 1) Берём исходник, запускаем процесс компиляции без DEBUG'а. 2) Проверяем существование исполняемого файла. Если его нет, то пишем "Compilation error", иначе далее по списку. 3) Замеряем время. 4) Запускаем поток полученного исполняемого файла в режиме отладки. Если произошла ошибка времени выполнения в запущенной проге, выдаём "Access Violation" (возможно более подробное описание ошибки, например DIV BY 0), присваиваем crash=true, вырубаем запущенный процесс. 5) Замеряем время, выдаём разницу. Всё работает без DEBUG'а, пока прога ведёт себя прилично. Так вот, я попробовал приведённый код для компиляции и запуска. Исходник (он обрабатывается первым), содержащий выход за границы массива, компилится нормально и выполняется, и выдаёт AV. Остальные исходники просто отказываются компилиться (все исходники у меня без ошибок компиляции). Можете объяснить в чём дело? И, если не сложно, описать работу цикла запуска программы (шаг 4) для моей задачи. |
| Автор: CPlusPlusFAN 1.3.2008, 15:43 |
| У меня всё получилось. Я сам догадался, как нужно сделать. Тему можно закрывать. |