Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.042 c
14-1105282639
DillerXX
2005-01-09 17:57
2005.01.30
У кого есть Rambler телесеть (это по ящику канал вместо культуры)


1-1105870166
DimDim
2005-01-16 13:09
2005.01.30
Копировать каталог


1-1105704279
zrv
2005-01-14 15:04
2005.01.30
Rave-отчет в RTF-формат


14-1105516116
Anonimus
2005-01-12 10:48
2005.01.30
Windows XP home


1-1105858601
DDDeN
2005-01-16 09:56
2005.01.30
Защита программного пакета





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский