Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2017, 20:32   #1
fo,wf
Пользователь
 
Регистрация: 16.06.2017
Сообщений: 22
Вопрос как найти GetLastError

как? если писать после проблемных строк то оно может и не работать ведь проблемные строки могут закрыть программу из-за ошибки, так и не дойдя до GetLastError. А если в другой проге не роботает ведь, в винде ещё много-го разных процессов и откудо оно знает что это именно те проблемные строки?

Последний раз редактировалось fo,wf; 02.07.2017 в 20:34.
fo,wf вне форума Ответить с цитированием
Старый 02.07.2017, 21:22   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от fo,wf Посмотреть сообщение
если писать после проблемных строк то оно может и не работать ведь проблемные строки могут закрыть программу из-за ошибки, так и не дойдя до GetLastError.
Большинство ошибок безобидные и проверяются на входи в функции API. Простым if() и если входные параметры не верные, то возвращается код ошибки. Или по выходу из вызова внутренних функций. Поэтому такой код выполняется корректно.
Другие ошибки обрабатываются, через ловушки ошибок. try-finally Перед вызовом опасного кода запоминается состояние программы и если ловушка поймает ошибку, то обработчик ошибки восстановит код к сохранённому состоянию. В самом худшем случае вас отбросит на самое начало работы программы. Если обработчика не нашлось, то программа закроется.
Потому вероятность того, что программа закроется от 1000 до 100 000.

Каждая программа запускается в отдельном адресном пространстве. Поэтому переменная с кодом ошибки у каждой программы своя. И программы никак не могут перепутать свои коды/строки ошибок. А в ядре аналогично для каждого процесса есть его участочек памяти. И функции должны сохранять данные в эти участки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 02.07.2017 в 21:25.
Pavia вне форума Ответить с цитированием
Старый 05.07.2017, 01:05   #3
DartSidius
Заблокирован
 
Регистрация: 05.07.2017
Сообщений: 2
По умолчанию

Цитата:
Сообщение от fo,wf Посмотреть сообщение
как? если писать после проблемных строк то оно может и не работать ведь проблемные строки могут закрыть программу из-за ошибки, так и не дойдя до GetLastError. А если в другой проге не роботает ведь, в винде ещё много-го разных процессов и откудо оно знает что это именно те проблемные строки?
Код:
LONG DebugInformator(PEXCEPTION_POINTERS p_excep)
{
   PEXCEPTION_RECORD p_excep_record = p_excep->ExceptionRecord;
   p_excep_record->ExceptionCode - тут код ошибки и вообще в p_excep_record много чего интересного

  return EXCEPTION_CONTINUE_EXECUTION;
}
__try
{
   //Здесь помещается критический код (а лучше весь).
}
__except (DebugInformator(_exception_info()))
Это реализация чисто под Си. В любом языке есть свои обработчики исключений. Можно также воспользоваться винапи SetUnhandledExceptionFilter

Последний раз редактировалось DartSidius; 05.07.2017 в 01:29.
DartSidius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows.GetLastError()=995 Горизонт Win Api 1 15.11.2013 09:36
Работа с GetLastError calypso Win Api 5 02.03.2013 09:09
GetLastError WizarD.89 Общие вопросы C/C++ 1 30.01.2012 00:32
Ошибки. GetLastError() maxflint Win Api 2 17.04.2011 16:45
как отсортировать массив под данный отрезок и как минимум и максимум из него найти SIEGER Паскаль, Turbo Pascal, PascalABC.NET 1 20.11.2008 08:58