![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Крах отладчика при передаче параметров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 |