Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.23;
Скачать: CL | DM;

Вниз

Противоречие .....   Найти похожие ветки 

 
oomneeq ©   (2002-05-14 14:52) [0]

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

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

Что за дела?

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

Где правда?


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


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

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


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

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


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

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


 
oomneeq ©   (2002-05-14 15:35) [4]

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


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


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

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


 
oomneeq ©   (2002-05-14 15:58) [6]

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


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


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




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

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


 
McSimm ©   (2002-05-14 16:18) [8]

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

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

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


 
oomneeq ©   (2002-05-14 16:35) [9]

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овсем) живой. Вот это-то чудное полуживое состояние и удивляет.


 
oomneeq ©   (2002-05-14 16:38) [10]

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

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



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

День добрый,

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

С уважением,


 
Anatoly Podgoretsky ©   (2002-05-14 16:53) [12]

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


 
Alx2 ©   (2002-05-14 17:48) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2002.05.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
6-73339
Андрей Сенченко
2002-03-12 22:10
2002.05.23
Непонятная ошибка в NMSMTP


1-73126
Student_
2002-05-13 14:37
2002.05.23
Ох уж эти формы!!


1-73226
Грифон
2002-05-15 00:20
2002.05.23
компоненты


3-73069
Bardel
2002-04-25 16:04
2002.05.23
Параметрическое задание таблиц


1-73112
jenbbond
2002-05-13 11:04
2002.05.23
Помогите с ошибкой