![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
CPlusPlusFAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Запускаю стороннее приложение через CreateProcess. Это приложение может вызвать Access Violation. Нужно перехватить эту ситуацию во избежание вывода окна "Отправлять/неотправлять отчёт" и вывести сообщение об ошибке.
Можно привести пример? ![]() ЗЫ У меня программа запускает сотни других программ и закрывать за ними окна вполне геморройно. Это сообщение отредактировал(а) CPlusPlusFAN - 26.2.2008, 15:37 |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Инжект библиотеки с установкой фильтра исключений -- SetUnhandledExceptionFilter
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
CPlusPlusFAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
А можно немного поподробней, а то я в первый раз с этим сталкиваюсь.
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
для таких случаев удобно использовать отладку(флаг DEBUG_PROCESS).
обработка исключения при подключенном отладчике(отладчиком в данном случае является наша запускающая программа) происходит в несколько этапов:
пример запуска с отладкой("рыба" - в комментариях написано, что по идее должно быть сделано отладчиком):
|
|||
|
||||
CPlusPlusFAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Столкнулся с такой проблемой: созданный поток, выполнение которого описано выше, отказывается работать.
Вот как прога должна работать: 1) Берём исходник, запускаем процесс компиляции без DEBUG'а. 2) Проверяем существование исполняемого файла. Если его нет, то пишем "Compilation error", иначе далее по списку. 3) Замеряем время. 4) Запускаем поток полученного исполняемого файла в режиме отладки. Если произошла ошибка времени выполнения в запущенной проге, выдаём "Access Violation" (возможно более подробное описание ошибки, например DIV BY 0), присваиваем crash=true, вырубаем запущенный процесс. 5) Замеряем время, выдаём разницу. Всё работает без DEBUG'а, пока прога ведёт себя прилично. Так вот, я попробовал приведённый код для компиляции и запуска. Исходник (он обрабатывается первым), содержащий выход за границы массива, компилится нормально и выполняется, и выдаёт AV. Остальные исходники просто отказываются компилиться (все исходники у меня без ошибок компиляции). Можете объяснить в чём дело? И, если не сложно, описать работу цикла запуска программы (шаг 4) для моей задачи. |
|||
|
||||
CPlusPlusFAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
У меня всё получилось. Я сам догадался, как нужно сделать. Тему можно закрывать.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |