Форум: "Основная";
Текущий архив: 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.035 c