![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
LamerTM |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
На AOF_L2 свет клином не сошелся. Она просто оказалась в нужное время в нужном месте, то есть на строке 8648 исходника. Если туда поставить другую процедуру - остановится в ней. Вот я сейчас сдвинул вниз AOF_L2 и ту что была выше её. Запустил - в результате остановка произошла вообще в середине предыдущей процедуры. Но только на строке 8677. Да и на AOF_L2 оно останавливалось не в начале процедуры. Наверное оно количество строк с синими точками остчитывает. Если поставить в первую строку AOF_L2 команду 'asm int 3 end', потом в программе нажать кнопки так чтобы запустилась AOF_L2, то остановка сразу вываливает в CPU-Window, при этом полоски дебагера в паскалевском редакторе нет. Скрин: ![]() Видно, что адрес AOF_L2 установлен правильно, а паскалевская строка (if nb[0] then...) - левая, имеет номер 13107, хотя AOF_L2 находится в районе 8648 строки. При трассировке по F7 в CPU-Window прога выполняется и курсор дебагера (не знаю как правильно он называется) иногда появляется в редакторе кода, а потом снова исчезает. Появляется он в самом конце текста, не на реально выполняемом коде. А изчезает, видимо, когда хочет появиться вообще вне текста.
Размер в байтах я не знаю как узнать. Размер в строках исходника - 21574 строк. Размер файла Unit5.pas 794КБ. |
||||
|
|||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Ого, 800 Кб текста!
Похоже на какой-то глюк компилятора из-за большого размера модуля. Попробуйте тупо разделить модуль пополам, и вторую половину вынести в inc-файл. Ещё я бы включил генерацию map-файлов в опциях проекта и сравнил бы получившийся map-файл с тем, что мы сейчас видим под отладчиком. Добавлено через 5 минут и 47 секунд P.S. А когда такое стало происходить? Раньше нормально работало или как? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
LamerTM |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Тут писали что у кого-то и по 2МБ исходники были. Я не знаю что такое inc-файл (я же ламер! ![]()
Да, раньше всё работало. Я пишу прогу и периодически сохраняю текущее состояние в отдельный архив. Последние порядка 15 процедур я написал без дебагера. Когда он понадобился, оказалось что всё глючит. |
||||
|
|||||
LamerTM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
В модуле есть массив:
Глюки начинаются когда количество элементов массива становится больше 132. Если просто скопировать этот массив в чистый проект, то глюк не появляется. ![]() |
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
есть предположение:
TTElemInfo содержит строки? Такая проблема может появится если какая-нибудь из строк будет содержать недопустимые символы, которые IDE не умеет обрабатывать: только $0A или только $0D, например. Это сообщение отредактировал(а) Bose - 26.11.2008, 21:40 |
|||
|
||||
LamerTM |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Да, TTElemInfo содержит строки.
Я поубирал некоторые особенно длинные строки и глюк исчез. ![]()
Искал программой только $0A и только $0D - не находит. Дело в другом, видимо. |
||||||
|
|||||||
LamerTM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Перенес массив в другой модуль, где меньше кода, и глюк исчез.
Еще одно открытие: в Unit5 много всяких деклараций (типов, констант). Если их часть перенести в другой модуль, то глюк исчезает без переноса массива. Так что похоже проблема в слишком большом объеме объявлений типов и констант. Это сообщение отредактировал(а) LamerTM - 27.11.2008, 09:49 |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Ну, вот, похоже, что это действительно глюк IDE, связанный с большим объёмом исходника. А может быть, даже не с объёмом, сколько с его видом. Как у Internal Error, например.
Тогда всего-то нужно лучше структурировать программу. P.S. Вынесение в inc-файл выполняется так: создаётся пустой текстовый файл с любым расширением, но обычно используют ".inc". В него пишется любой текст, в частости можно перенести текст из pas-модуля. Затем в то место, где нужно вставить этот текст, в pas-модуль добавляется "{$I имя-файла.inc}" (с относительным путём поиска, если он нужен). Тогда компиялтор считает, что в pas-модуле как буд-то вместо этой директивы написан текст самого inc-файла. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
LamerTM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Я пробовал увеличивать размер кода в модуле. Глюк не возникает. (добавлял лишние огромные процедуры с их вызовом) А вот от увеличения части где объявляются типы и константы глюк возникает. Вынос массива или части кода в inc-файл проблемы не решает - глюк остается. Добавлено @ 11:12 Мне удалось воссоздать глюк в чистом проекте! Для этого скопировал все объявления типов и констант из своего проекта. Это сообщение отредактировал(а) LamerTM - 27.11.2008, 11:14 |
|||
|
||||
LamerTM |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
Как сделать такой глюк в Delphi 7.
Надо нажать File -> New -> Applicaition На форму кинуть кнопку TButton и Memo. В Memo сделать ScrollBars видимыми. В событии OnClick Button1 написать такой код:
Запустить Project1 по F9. Нажать в нем кнопку. Содержимое Memo выделить и скопировать в буфер по Ctrl+C. Закрыть Project1. Зайти в редактор кода проекта. После раздела uses написать слово const и вставить Ctrl+V так чтобы получилось так:
После этого поставить бряк на первую строку Button1Click. Нажать F9. У меня в D7 бряк не срабатывает. |
||||
|
|||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
LamerTM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 11.3.2006 Репутация: нет Всего: 0 |
В Delphi 2005 глючит. А D2007 у меня нет. Это сообщение отредактировал(а) LamerTM - 27.11.2008, 14:42 |
|||
|
||||
vkhacker |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 1 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
У меня практически та же картина: один из модулей не отлаживается. Размер: меньше 2000 строк. С остальными модулями все отлично. Не знаю в чем дело.
|
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
И чо?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |