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

Вниз

Проблема с дебагом   Найти похожие ветки 

 
vint45   (2005-01-19 13:16) [0]

Всем привет!
У меня в приведенном ниже примере дебагер неверно отображает значение переменной inc1, приведу для начала сам код:

type

 THKActions = (hkaChoiceElList);
 TSHKActions = set of THKActions;
 THKFormComp = record
  Form: string;
  Component: string;
  AccActions: TSHKActions;
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   cbHKAction: TComboBox;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

const
 arrHKFormComp: array[0..0] of THKFormComp =
  ((Form:"AAAA"; Component: "BBBB"; AccActions: [hkaChoiceElList]));
 arrHKNameAction: array[THKActions] of String =
  ("Выбор элемента из списка");

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var inc1: integer;
   inc2: THKActions;
begin
for inc1:=0 to High(arrHKFormComp) do begin
//  Self.Tag:=inc1;
 if     (AnsiUpperCase(Trim(arrHKFormComp[inc1].Form))=AnsiUpperCase(Trim("AAAA")))
    and (AnsiUpperCase(Trim(arrHKFormComp[inc1].Component))=AnsiUpperCase(Trim("BBBB")))
 then begin
  for inc2:=Low(arrHKNameAction) to High(arrHKNameAction) do
   if inc2 in arrHKFormComp[inc1].AccActions then cbHKAction.AddItem(arrHKNameAction[inc2],nil);
  Break;
 end;
end;
end;

так вот в обработчике события нажатия кнопки в цикле с inc1, после присвоения ей начального значения 0, дебагер показывает присвоенное значение 1 (и как следствие, неправильно отображает значения элементов массивов с inc1).
Просвятите, плз, может я что-то неправильно делаю или может это, например, неправильная оптимизация)?


 
Digitman ©   (2005-01-19 13:21) [1]

вместо //  Self.Tag:=inc1; напиши ShowMessage(inttostr(inc1)) и убедись, что значение inc1 в точности соответствует ожидаемому

полагаться же на истинность того, что показывает тебе дебагер, не следует из-за работы оптимизатора кода


 
vint45   (2005-01-19 13:30) [2]

Это я уже пробовал, прокатывает. Но мне хотелось узнать почему такая трабла возникает. Ведь как я понимаю, оптимизация срабатывает, когда на переменную в данном блоке программы отсуствуют какие-либо ссылки, или эти ссылки являются не используемыми. А здесь ссылка в цикле на inc1 есть и является "рабочей", т.е. с ее помощью проверяется добавлять ли в комбобох новый элемент или нет.


 
Digitman ©   (2005-01-19 13:41) [3]


> хотелось узнать почему такая трабла возникает


потому что переменная inc1 в случае отсутствия ссылок на нее может храниться в РОН, а не в ячейке памяти .. использование же в дан.случае inc1 только как индекса при обращении к массиву "сылкой" в привычном понимании служить не может - компилятор волен использовать РОН и его значение при вычислении адреса эл-та массива так как ему заблагорассудится, благо на конечный результат это никак не влияет, зато благотворно влияет на сквозную производительность алгоритма в целом


 
vint45   (2005-01-19 14:08) [4]

В общих чертах понятно, т.е., как я понял, основным моментом здесь является то, что для inc1 здесь все-таки включается алгоритм оптимизации кода.


 
vint45   (2005-01-19 14:19) [5]

спасибо



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

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

Наверх




Память: 0.48 MB
Время: 0.033 c
1-1106164534
Degobar
2005-01-19 22:55
2005.01.30
Image1.Canvas.Pixels выдает ошибку ????


3-1103790797
Russko
2004-12-23 11:33
2005.01.30
"Поломка базы данных"


3-1104218930
Scorpio
2004-12-28 10:28
2005.01.30
Could not convert variant of type (Null) into type (String)


1-1106136165
Артемиус
2005-01-19 15:02
2005.01.30
TMemoryStream и TBitmap: кто виноват?


14-1105249300
Чеширский_Кот
2005-01-09 08:41
2005.01.30
Perl to Pascal