Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
ВнизПротиворечие ..... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c