Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает breakpoint, В одной из программ. 
:(
    Опции темы
LamerTM
Дата 26.11.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(CodeMonkey @ 26.11.2008,  18:23)
А вот интересно, если код FormCreate IDE считает за код AOF_L2, то за что будет она считать код самой AOF_L2? По типу, это какой-то странный сдвиг строк вдруг произошёл или ещё что-то...

Добавлено @ 18:24
А какой размер в строках/байтах имеет этот модуль?

На AOF_L2 свет клином не сошелся. Она просто оказалась в нужное время в нужном месте, то есть на строке 8648 исходника. Если туда поставить другую процедуру - остановится в ней. Вот я сейчас сдвинул вниз AOF_L2 и ту что была выше её. Запустил - в результате остановка произошла вообще в середине предыдущей процедуры. Но только на строке 8677. Да и на AOF_L2 оно останавливалось не в начале процедуры. Наверное оно количество строк с синими точками остчитывает.

Если поставить в первую строку AOF_L2 команду 'asm int 3 end', потом в программе нажать кнопки так чтобы запустилась AOF_L2, то остановка сразу вываливает в CPU-Window, при этом полоски дебагера в паскалевском редакторе нет. Скрин:

user posted image

Видно, что адрес AOF_L2 установлен правильно, а паскалевская строка (if nb[0] then...) - левая, имеет номер 13107, хотя AOF_L2 находится в районе 8648 строки.
При трассировке по F7 в CPU-Window прога выполняется и курсор дебагера (не знаю как правильно он называется) иногда появляется в редакторе кода, а потом снова исчезает. Появляется он в самом конце текста, не на реально выполняемом коде. А изчезает, видимо, когда хочет появиться вообще вне текста.

Цитата

А какой размер в строках/байтах имеет этот модуль?

Размер в байтах я не знаю как узнать. Размер в строках исходника - 21574 строк. Размер файла Unit5.pas 794КБ.
PM MAIL   Вверх
CodeMonkey
Дата 26.11.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Ого, 800 Кб текста!
Похоже на какой-то глюк компилятора из-за большого размера модуля.

Попробуйте тупо разделить модуль пополам, и вторую половину вынести в inc-файл. 

Ещё я бы включил генерацию map-файлов в опциях проекта и сравнил бы получившийся map-файл с тем, что мы сейчас видим под отладчиком.

Добавлено через 5 минут и 47 секунд
P.S. А когда такое стало происходить? Раньше нормально работало или как?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
LamerTM
Дата 26.11.2008, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(CodeMonkey @ 26.11.2008,  19:06)
Ого, 800 Кб текста!
Похоже на какой-то глюк компилятора из-за большого размера модуля.

Попробуйте тупо разделить модуль пополам, и вторую половину вынести в inc-файл. 

Ещё я бы включил генерацию map-файлов в опциях проекта и сравнил бы получившийся map-файл с тем, что мы сейчас видим под отладчиком.

Добавлено @ 19:12
P.S. А когда такое стало происходить? Раньше нормально работало или как?

Тут писали что у кого-то и по 2МБ исходники были.

Я не знаю что такое inc-файл (я же ламер!  smile ), а также что такое map-файл. Поэтому писал всё в один модуль. Глюк я заметил вчера, когда надо было отладить код, поставил бряк, а он не сработал.


Цитата

P.S. А когда такое стало происходить? Раньше нормально работало или как?

Да, раньше всё работало. Я пишу прогу и периодически сохраняю текущее состояние в отдельный архив. Последние порядка 15 процедур я написал без дебагера. Когда он понадобился, оказалось что всё глючит.
PM MAIL   Вверх
LamerTM
Дата 26.11.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



В модуле есть массив:

Код

const

TotalElems=137;

Elems: array[0..TotalElems - 1] of TTElemInfo = (
....
);


Глюки начинаются когда количество элементов массива становится больше 132. Если просто скопировать этот массив в чистый проект, то глюк не появляется. smile 
PM MAIL   Вверх
Bose
Дата 26.11.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



есть предположение:
Цитата(LamerTM @  26.11.2008,  20:21 Найти цитируемый пост)
Глюки начинаются когда количество элементов массива становится больше 132. Если просто скопировать этот массив в чистый проект, то глюк не появляется. smile  

TTElemInfo содержит строки?

Такая проблема может появится если какая-нибудь из строк будет содержать недопустимые символы, которые IDE не умеет обрабатывать: 
только $0A или только $0D, например.

Это сообщение отредактировал(а) Bose - 26.11.2008, 21:40
PM MAIL WWW Skype   Вверх
LamerTM
Дата 26.11.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(Bose @ 26.11.2008,  21:39)
есть предположение:

TTElemInfo содержит строки?

Да, TTElemInfo содержит строки.

Код

type
  TTElemInfo = record
    Name: String;
    ParametersCount: Integer;
    ParametersCaptions: array[1..TotalParameters] of String;
    DefaultParametersValues: array[1..TotalParameters] of Double;
    DefaultParametersOPValues: array[1..TotalParameters * 3] of Double;
    Description: String;
  end;


Я поубирал некоторые особенно длинные строки и глюк исчез. smile  Убрал много полезных строк, как попало. Похоже причина в их количестве.

Цитата

Такая проблема может появится если какая-нибудь из строк будет содержать недопустимые символы, которые IDE не умеет обрабатывать: 
только $0A или только $0D, например.

Искал программой только $0A и только $0D - не находит. Дело в другом, видимо.
PM MAIL   Вверх
LamerTM
Дата 26.11.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Перенес массив в другой модуль, где меньше кода, и глюк исчез.


Еще одно открытие: в Unit5 много всяких деклараций (типов, констант). Если их часть перенести в другой модуль, то глюк исчезает без переноса массива. Так что похоже проблема в слишком большом объеме объявлений типов и констант.

Это сообщение отредактировал(а) LamerTM - 27.11.2008, 09:49
PM MAIL   Вверх
CodeMonkey
Дата 27.11.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Ну, вот, похоже, что это действительно глюк IDE, связанный с большим объёмом исходника. А может быть, даже не с объёмом, сколько с его видом. Как у Internal Error, например.
Тогда всего-то нужно лучше структурировать программу.

P.S. Вынесение в inc-файл выполняется так: создаётся пустой текстовый файл с любым расширением, но обычно используют ".inc". В него пишется любой текст, в частости можно перенести текст из pas-модуля.
Затем в то место, где нужно вставить этот текст, в pas-модуль добавляется "{$I имя-файла.inc}" (с относительным путём поиска, если он нужен). Тогда компиялтор считает, что в pas-модуле как буд-то вместо этой директивы написан текст самого inc-файла.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
LamerTM
Дата 27.11.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(CodeMonkey @ 27.11.2008,  10:21)
Ну, вот, похоже, что это действительно глюк IDE, связанный с большим объёмом исходника. А может быть, даже не с объёмом, сколько с его видом. Как у Internal Error, например.
Тогда всего-то нужно лучше структурировать программу.

P.S. Вынесение в inc-файл выполняется так: создаётся пустой текстовый файл с любым расширением, но обычно используют ".inc". В него пишется любой текст, в частости можно перенести текст из pas-модуля.
Затем в то место, где нужно вставить этот текст, в pas-модуль добавляется "{$I имя-файла.inc}" (с относительным путём поиска, если он нужен). Тогда компиялтор считает, что в pas-модуле как буд-то вместо этой директивы написан текст самого inc-файла.

Я пробовал увеличивать размер кода в модуле. Глюк не возникает. (добавлял лишние огромные процедуры с их вызовом)
А вот от увеличения части где объявляются типы и константы глюк возникает.

Вынос массива или части кода в inc-файл проблемы не решает - глюк остается.

Добавлено @ 11:12
Мне удалось воссоздать глюк в чистом проекте! Для этого скопировал все объявления типов и констант из своего проекта.

Это сообщение отредактировал(а) LamerTM - 27.11.2008, 11:14
PM MAIL   Вверх
LamerTM
Дата 27.11.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Как сделать такой глюк в Delphi 7.

Надо нажать File -> New -> Applicaition

На форму кинуть кнопку TButton и Memo. В Memo сделать ScrollBars видимыми.
В событии OnClick Button1 написать такой код:

Код

procedure TForm1.Button1Click(Sender: TObject);
var       i: Integer;
begin
Memo1.Visible := False;
Memo1.Lines.Clear;
for i := 0 to 50000 do
Memo1.Lines.Add('const'+IntToStr(i)+' =1;');
Memo1.Visible := True;
end;


Запустить Project1 по F9. Нажать в нем кнопку. Содержимое Memo выделить и скопировать в буфер по Ctrl+C. Закрыть Project1.

Зайти в редактор кода проекта. После раздела uses написать слово const и вставить Ctrl+V так чтобы получилось так:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const

const0 =1;
const1 =1;
const2 =1;
.....
const50000 =1;


После этого поставить бряк на первую строку Button1Click. Нажать F9. У меня в D7 бряк не срабатывает.
PM MAIL   Вверх
CodeMonkey
Дата 27.11.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89





--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
CodeMonkey
Дата 27.11.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Цитата(LamerTM @  27.11.2008,  11:46 Найти цитируемый пост)
У меня в D7 бряк не срабатывает.

D2007 - работает отлично.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
LamerTM
Дата 27.11.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 11.3.2006

Репутация: нет
Всего: 0



Цитата(CodeMonkey @ 27.11.2008,  12:57)
D2007 - работает отлично.

В Delphi 2005 глючит. А D2007 у меня нет.

Это сообщение отредактировал(а) LamerTM - 27.11.2008, 14:42
PM MAIL   Вверх
vkhacker
Дата 30.4.2010, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.12.2009

Репутация: нет
Всего: нет



У меня практически та же картина: один из модулей не отлаживается. Размер: меньше 2000 строк. С остальными модулями все отлично. Не знаю в чем дело.
PM MAIL WWW   Вверх
CodeMonkey
Дата 30.4.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



И чо?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1108 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.