![]() |
![]() ![]() ![]() ![]() |
|
Крах отладчика при передаче параметровDelphi , Программа и Интерфейс , IDE и Компилятор
Оформил: DeeCo Автор: Александр Малыгин
type
TBTZ = packed record
case integer of
0: (BTZ1: array[0..6] of byte;
BTZ2: array[0..1] of byte;
BTZ3: array[0..1] of byte;
BTZ4: array[0..2] of byte);
1: (BTZW, BTZH: array[0..6] of byte);
2: (BTZ: array[0..13] of byte);
end;
TPrmTS = packed record
PrmC, PrmN: array[0..3] of TBTZ;
end;
procedure Stone(var P: TPrmTS);
begin
// ...
end;
При прогоне без остановки никаких сбоев не происходит. Если сделать
шаг или отпустить на выполнение внутри процедуры, отладчик тихо исчезает вместе
с приложением, без каких либо сообщений. Проблема не проявляется, если записи не
packed, либо если TPrmTS содержит только одно поле, либо если массивы PrmC,PrmN
состоят из менее 4 элементов. Манипуляции с размерами массивов и вставкой
дополнительных полей в TBTZ перед case приводят к разным результатам:
РЕШЕНИЕ: Передавать проблемный тип как нетипизированный var-параметр. При передаче параметра TPrmTS в процедуру Stone, отладчик может исчезнуть вместе с приложением из-за packing-record и массивов, содержащих более 4 элементов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: IDE и Компилятор ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||