Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
3-73062
Bardel
2002-04-27 14:22
2002.05.23
Ошыбки


3-72994
PavelOKES
2002-04-24 07:53
2002.05.23
Delphi + MSAccess = глюк


1-73252
MisterBin
2002-05-09 18:37
2002.05.23
А как создать процесс?


3-73047
Slym
2002-04-23 11:27
2002.05.23
Пытаюсь свелать предка TDataModule...


4-73466
zondor
2002-03-25 15:03
2002.05.23
API - Cvjazj s drugimi Prilozenijami





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский