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

Вниз

Watches   Найти похожие ветки 

 
Lenza   (2003-07-07 12:39) [0]

Отчего даже в такой простой процедуре, как эта, при вызове переменной I в Watches может выдаваться Inaccessible Value?

procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
begin
I:=0;
Caption := IntToStr(I);
end;

На самом деле все немного сложнее, здорово обламывает. Где-то в опциях напорол, что-ли? Аж плакать хочется..(


 
Skier ©   (2003-07-07 12:41) [1]

Попробуй оптимизацию отключить.


 
Lenza   (2003-07-07 13:03) [2]

Неа, не помогает. Да и раньше с оптимизацией работало все нормалек.
Если брейкпойнт здесь: Caption := IntToStr(I);, оптимизации ещё нет.


 
MBo ©   (2003-07-07 13:12) [3]

переменная I далее не используется, вот и нет нужды компилятору хранить ее в стеке - в D5 так получается:
xor esi,esi //обнуление - никакого обращения к переменной, да и самой ее физически нет
...
mov eax, esi
call IntToStr


 
Lenza   (2003-07-07 13:26) [4]


> MBo

Используется же!: Caption := IntToStr(I)...
Но уже не важно, причина - LocalSymbols.

Спасибо всем за участие.)


 
Lenza   (2003-07-07 13:29) [5]


> MBo

Тут D7? На D5 я вообще никогда не работал.
Да и при оптимизации-то он пишет, что ..due to Optimization.)


 
pasha676   (2003-07-07 13:31) [6]


> Используется же!:

Нет. Фактически нет.


> Но уже не важно, причина - LocalSymbols.

Нет. Просто глобальные переменные не оптимизируються. Причина в том, что строчки
I:=0;
Caption := IntToStr(I);

Компилятор фактически преобразует в Caption := IntToStr(0);
О чем и писал МВо.



 
MBo ©   (2003-07-07 13:33) [7]

>Используется же!:
Компилятор прекрасно знает, что программе нужно показать не любое число, а 0, вот и делает это достойным образом


 
Lenza   (2003-07-07 13:39) [8]

Все мы умные и красивые.)

procedure TForm1.Button1Click(Sender: TObject);
var I: Integer; //это - моя первая глобальная переменная
begin
I:=0;
Caption := IntToStr(I);//а поставить здесь брейкпойнт, у меня
//почему-то при включеной оптимизации и включенной опции
//Project|Options|Compiler|Debugging|LocalSymbols - BM_SETCHECK
//показывает I:=0, спасибо Борланду за это:)
end;


 
Lenza   (2003-07-07 13:40) [9]


> MBo © (07.07.03 13:33)

Во-во, спасибо Борладу за это;)


 
Lenza   (2003-07-07 13:44) [10]

Просто до этого у меня по невнимательности проблема возникла.
На самом деле, разницы для него нет: for I:=0 to 5 do или I:=0 - все кажет, спасибо всем!)




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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
3-77797
Sliften
2003-06-29 20:38
2003.07.24
Как програмно добавить поле


3-77772
Лора
2003-07-02 09:15
2003.07.24
Запрос в Access


1-77924
Starkom
2003-07-10 09:19
2003.07.24
Хочу сделать хоткеи в Dll ке


8-78006
Fast
2003-04-02 23:54
2003.07.24
mp3->wav


14-78073
Кен
2003-07-06 02:27
2003.07.24
ОРТ представляет : Терракты и КВН - вместе веселее