Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка Исключений в 64-битных Приложениях NT Service на C++Builder

Delphi , Синтаксис , Ошибки и Исключения

Вопрос, поднятый в данном запросе, касается обработки исключений в 64-битных приложениях NT Service, созданных с помощью C++Builder. Компания столкнулась с проблемой, когда клиентское приложение начинало логировать множество необработанных исключений C++. После долгих диагностических сборок и попыток выяснить причину, было установлено, что исключения Delphi/C++ перехватываются не в правильных блоках catch, а в блоке по умолчанию. Это поведение было воспроизведено на примере кода, который запускает диагностику в новом потоке и логирует результаты, бросая различные исключения в цикле и перехватывая их.

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

Компания не смогла воспроизвести проблему в своих тестовых средах, и у них нет информации о конфигурации сервера клиента, включая тип экземпляра AWS, историю обновлений Windows и используемый AMI. Проект был собран с использованием RAD Studio 10.4 Update 2 и настроен на использование runtime packages.

В редакции от 5/23 указано, что был изменен диагностический код для анализа информации о SEH исключениях, чтобы выяснить причину, по которой блок catch не перехватывает исключения. В примере нового теста используется фильтр исключений exc_filter и функция AnalyzeException для анализа информации об исключении.

Подтвержденный ответ:

Проблема заключается в том, что исключения Delphi/C++ не перехватываются в соответствующих блоках catch, а обрабатываются блоком по умолчанию. Это может быть связано с настройками проекта или особенностями среды выполнения клиента.

Альтернативный ответ:

Попытки диагностики и изменения кода обработки исключений могут помочь в определении проблемы. Рекомендуется использовать SEH обработку (__try/__except) для более тонкой настройки перехвата исключений и анализа их типов.

Примеры из комментариев:

  • Использование const ссылки в блоках catch для перехвата исключений.
  • Применение SEH механизма для более глубокого анализа исключений.
  • Использование GetExceptionCode() для определения типа исключения.
  • Получение RTTI исключения для детального анализа его свойств.

Рекомендации по коду:

  • Использовать try/__try для обработки исключений в Windows-средах.
  • В случае перехвата SEH исключений, использовать GetExceptionInformation() для получения указателя на объект исключения и его анализа.
  • В случае, если исключение должно быть перехвачено catch(ExceptionClass), проверить GetExceptionCode(), и если код соответствует 0xEEFFACE или 0xEEFFADE, использовать GetExceptionInformation()->ExceptionRecord.ExceptionInformation[1] для получения указателя на объект Exception и дальнейшего анализа его свойств.

Заключение:

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


В данном ответе мы рассмотрели проблему, связанную с обработкой исключений в 64-битных приложениях NT Service, созданных на C++Builder. Мы пересказали информацию из запроса, указали на возможные причины проблемы и привели рекомендации по её устранению, включая примеры кода на Object Pascal (Delphi), которые могут быть полезны при диагностике и тестировании приложения.

Создано по материалам из источника по ссылке.

Обработка Исключений в 64-битных Приложениях NT Service на C++Builder не происходит должным образом, так как исключения Delphi/C++ перехватываются не в пользовательских блоках `catch`, а в блоке по умолчанию.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ошибки и Исключения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 12:51:21/0.0037291049957275/0