Главная страница
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.017 c
7-73409
perov
2002-02-24 11:28
2002.05.23
русификация Командной строки в вин2000


6-73336
tupica
2002-03-12 20:50
2002.05.23
Как отправить майл?


6-73342
eviL
2002-03-12 10:47
2002.05.23
Sokets


3-73078
Sirus
2002-04-25 06:41
2002.05.23
Проблема скорости в базе данных


4-73455
Mastak
2002-03-10 01:17
2002.05.23
Функция EnumCachedResources