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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2022, 12:16   #1
Наталья2022
Новичок
Джуниор
 
Регистрация: 25.08.2022
Сообщений: 3
По умолчанию exceptions в секции finally некорректно работают при включении EurekaLog

Добрый день!

В EurekaLog ошибка или я что-то делаю не так и мой код ошибочный? Пытаюсь выполнить данный код. Без EurekaLog отображает 4 сообщения:
1919
5=1
1920
1

С EurekaLog отображает только
1919
а потом проект вылетает с ошибкой
Application made attempt to free invalid or unknown memory block

В чём может быть дело? Разве нельзя использовать вложенные обработчики исключений в секции finally?

Код:
   try
      try
         raise Exception.Create('1');
      finally
         try
            raise Exception.Create('100'); //если эту строку убрать, все норммально
         except
            on E:Exception do begin
            end;
         end;
      end;
   except
      on E:Exception do begin
         ShowMessage('1919');
         ShowMessage('5='+E.Message); //вод здесь выходит ошибка Application made attempt to free invalid or unknown memory block
         ShowMessage('1920');
         raise Exception.Create(E.Message);
      end;
   end;
Наталья2022 вне форума Ответить с цитированием
Старый 25.08.2022, 12:34   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А при чем тут исключения? Сами же сказали, что без EurekaLog все сработало.
Ищите причину ошибки в этом самом EurekaLog.
macomics вне форума Ответить с цитированием
Старый 25.08.2022, 12:45   #3
Наталья2022
Новичок
Джуниор
 
Регистрация: 25.08.2022
Сообщений: 3
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
А при чем тут исключения? Сами же сказали, что без EurekaLog все сработало.
Ищите причину ошибки в этом самом EurekaLog.
Дело в том, что приложение периодически отваливается на подобном коде. Примерно раз в неделю. Инструмент EurekaLog был установлен чтобы выявить возможные ошибки в программе. Ну он и выявил. Только непонятно, где тут ошибка.
Наталья2022 вне форума Ответить с цитированием
Старый 25.08.2022, 13:47   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда стоит изучить эту причину ошибки подробнее. Например исследовать код более подробно и на низком уровне.

Возможно это даже не в этом коде дело. Высвобождение памяти может начинаться массово с использованием сборщика мусора после возникновения исключения. Тогда не верный указатель мог появляться в любом месте кода, где вы забыли что-то освободить (допустим присвоили nil вместо указателя, а сам блок не высвободили, но в destroy этот nil передается для освобождения).
macomics вне форума Ответить с цитированием
Старый 26.08.2022, 02:21   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Наталья2022 Посмотреть сообщение
Разве нельзя использовать вложенные обработчики исключений в секции finally?
Вообще-то говоря нельзя. Как нельзя, например, разрешать детям баловаться со спичками.
Вы можете прокомментировать свой код? Для чего нужна та или иная строка?

Цитата:
Сообщение от macomics Посмотреть сообщение
Ищите причину ошибки в этом самом EurekaLog.
Не надо валить на Эврику. Она-то как раз работает нормально.
northener вне форума Ответить с цитированием
Старый 02.09.2022, 10:34   #6
Наталья2022
Новичок
Джуниор
 
Регистрация: 25.08.2022
Сообщений: 3
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Вообще-то говоря нельзя. Как нельзя, например, разрешать детям баловаться со спичками.
Вы можете прокомментировать свой код? Для чего нужна та или иная строка?
try-except-end присутствует в секции finally в процедуре, которая вызывается в секции finally. И так может быть во многих местах проекта - в какой-нибудь секции finally где-нибудь вызывается процедура, в которой может присутствовать try-except-end.

Объектно-ориентированное программирование, как может быть вообще такое что приходится задумыватся, что использовать можно, а что нельзя в секции finally? Почему нельзя-то, ситуация же вроде стандартная и совершенно простая. Или не использовать вообще finally в программе, тк процедуры, которые из секции finally вызываются, могут в любое время обрасти дополнительными try-except-end и компилятор на это отреагирует совершенно нормально, даже hints и warnings не выведет.

Сам код, приведённый в примере,выдернут из проекта, а потом максимально упрощен (чтобы не размещать здесь более 1000 строк кода) - чтобы продемонстрировать глюк Delphi или как вариант, глюк EurekaLog, так как без EurekaLog-то всё вроде работает нормально ...
Наталья2022 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при включении компа начал мигать экран с частотой бликов раз в секунду. Рабочий стол и все прочее нормально работают Максим_Западное Компьютерное железо 1 27.05.2016 17:23
с++.операторы цикла while. do while. for. работают некорректно. linberg Помощь студентам 2 13.10.2013 17:01
EurekaLog Desha Компоненты Delphi 2 27.06.2013 13:54
Почему две программы с инди одновременно работают некорректно? TwiX Работа с сетью в Delphi 1 12.12.2009 15:22
EurekaLog [Delphi7] NieL Общие вопросы Delphi 0 17.08.2009 11:35