Главная страница
    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.033 c
3-1104158542
Михаил2209
2004-12-27 17:42
2005.01.30
Вопрос Query выполняет запрос и показывает результат в DBGrid...


3-1103897690
Midas.dll
2004-12-24 17:14
2005.01.30
как зарегистрить


1-1106128654
Автор333
2005-01-19 12:57
2005.01.30
Месяц прописью?


4-1102515267
Chaser
2004-12-08 17:14
2005.01.30
Как присвоить хинту иконки программы в трее значение переменной?


4-1102500909
maxistent
2004-12-08 13:15
2005.01.30
Работа с COM ами...





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