Помогите с проблемой в Delphi 7.
В проекте в разделе Const много констант всяких разных.
И в IDE Delphi Project\Information for... в строке Data Size
стоит число 66569 байт.
При попытке добавить еще константы Data segment разрастается настолько, что при попытке отладки программы встроенными средствами отладчик останавливается в произвольном месте программы, соответственно с ошибкой (например посередине какой-то процедуры, когда ее переменные не определены).
Похоже на то, что используется 16-битная адресация, хотя среда 32 битная. И, соответственно, компилятор компилирует код, где использует регистры вы [ds] вместо [eds]. Вопрос: Как управлять в Delphi 7 сегментом данных.Как разрешить компилятору использовать сегмент данных более 64К.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
10-11-2018 05:24 | Сообщение от автора вопроса
Уточнение: косяк именно отладчика. Поскольку код генерируется верный.
Вовсе нет. Код корректно работает, если нет объявления данного массива. Проверено.
IDE дает возможность объявить только массив на 16 элементов. ТОгда отладка идет нормально. Если довабляешь 17й элемент массива - прыжок в "левую" процедуру еще до показа основной формы.
Дальше добавить другие константы уже невозможно - аналогичный результат.
Если, как выяснилость, data seg у D7 2Гб, то закрадывается подозрение, что это косяк самого IDE.
Проверил этот код на Delphi 6 - аналогичный результат.
Я провел эксперимент, и вынес массив констант в процедуру, где она обрабатывается и вуаля - все заработало.
Боюсь Вас огорчить, но дело - дрянь. В коде Вы где-то пишете совсем не туда, куда хотите. AV не получаете лишь только потому, что это тоже ваша память.
Спасибо Александр Малыгин.
Посмотрел, но к сожалению у меня компиляция идет без ошибок.
Я попадаю в середину "левой" процедуры во время отладки.
Я провел эксперимент, и вынес массив констант в процедуру, где она обрабатывается и вуаля - все заработало. Отладка идет как надо. Более того. Даже в случае, если в IDE отладка не идет (массив констант в глобальном разделе), код генерируется верный, и порграмма работает как надо.
Спасибо за разъяснения. Но как мне тогда быть? Добавление текстовых констант вызывает крах программы. НИчего экстраординарного я не делаю в объявлениях.
Не надо ничего разрешать. Размер "сегмента" данных в Delphi 7 - 2Гб и его размер никак не управляется. На 64-битном компиляторе (но вам это не грозит, у D7 нету 64-битной версии) размер "сегмента"... короче, неограничен.
Вы не там ищете ошибку.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.