Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Противоречие ..... [D5, NT4]


oomneeq ©   (2002-05-14 14:52:00) 

Вот какие интересности;

AA:=(Application=nil);
//здесь отладчик показывает Application=nil; AA=false

Что за дела?

Дело происходит при завершении приложения, и насамом деле очень важно знать обнилился ли Application.

Где правда?


Alx2   (2002-05-14 17:48:00) [1]

>Так что отладчик может показать неверное значение,
Тогда это не отладчик :)


Anatoly Podgoretsky   (2002-05-14 16:53:00) [2]

oomneeq © (14.05.02 16:35)
Так уже лучше, но дело в том, что компилятор может выкинуть переменную в целях оптимизации, я бы на его месте так поступил.
Так что отладчик может показать неверное значение, вместо этого отладку лучше провести по шагам с точками останова и если необходимо с выводом значений.


Игорь Шевченко   (2002-05-14 16:47:00) [3]

День добрый,

А поставить Breakpoint в DoneControls (где, собственно говоря, естественным путем Application в nil устанавливается) не помогает ?

С уважением,


oomneeq   (2002-05-14 16:38:00) [4]

Поправка
к к-л свойствуApliccation

2McSimm
>Но тут фигурирует вызов функции, а Application это просто переменная
Ото ж ...


oomneeq   (2002-05-14 16:35:00) [5]

2Anatoly Podgoretsky ©
Раскрываю многоточие для снятия сомнений

procedure DLLFinit;stdcall;
var AA,AT:boolean;
begin
if DLLisInitialised then begin
AA:=Assigned(Application);
if AA then try
AT:=Application.Terminated;
except
AA:=false;
end;

if AA then begin
FreeObjectsWithAppAsOwner ;
end;

Application:=DLLAppl;
DLLAppl:=nil;
end;
end;

Tрюк с try - вынужденный
Т.О. проверяется Apliccation на валидность
т.к хоть AA 1й раз и труе, обращение к к-л Apliccation генерит эксэпщн, что дает возможность косвенно определить, что Apliccation не (cовсем) живой. Вот это-то чудное полуживое состояние и удивляет.


McSimm   (2002-05-14 16:18:00) [6]

Похожая проблема у меня была вчера. При отладке программы в окне Evaluate / Modify я наблюдал следующие значения выражений:

L (показывает 1)
Length(Result) (показывает 1)
Length(Result) = L (показывает False) !!!

Но тут фигурирует вызов функции, а Application это просто переменная


Anatoly Podgoretsky   (2002-05-14 16:10:00) [7]

Пока переменная не используется


oomneeq   (2002-05-14 15:58:00) [8]

>Виктор Щербаков
>Это хорошо, а используется ли её значение, присваиваемое в строчке AA:=(Application=nil)?


AA:=(Application=nil);
if AA then ...


Я называю это "переменная используется"
если твое определение
"значение переменной используется"
означает то же, то ответ положительный



Виктор Щербаков   (2002-05-14 15:40:00) [9]


> переменная AA используется

Это хорошо, а используется ли её значение, присваиваемое в строчке AA:=(Application=nil)?


oomneeq   (2002-05-14 15:35:00) [10]

"здесь" - на следующей строчке, как и нарисовал.
переменная AA используется
>тогда другое дело.
Именно это самое "другое дело"


Виктор Щербаков   (2002-05-14 15:08:00) [11]

Кулюкин Олег © (14.05.02 15:03)
Хотя обычно пишет, что переменная недоступна из-за оптимизации.


Кулюкин Олег   (2002-05-14 15:03:00) [12]

Если переменная AA нигде не используется, то оптимизатор может с ней сотворить нечто нехорошее. В частности, отладчик может показать неверное значение.


Виктор Щербаков   (2002-05-14 14:57:00) [13]


> //здесь отладчик показывает Application=nil; AA=false

Где здесь? Если на строчке AA:=(Application=nil);, то это вполне вероятно, а если на следующей строчке, тогда другое дело.


Наверх

Титульная страница Поиск, карта сайта Написать письмо