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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Жесткий глюк Delphi 2006 и выше, глюк в святая святых - в компиляторе 
V
    Опции темы
Louken
Дата 11.4.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.9.2008
Где: Кострома

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



Сама тема обсуждалась тут.
Проблема пока не решена. Может кто на этом форуме встречался с чем нибудь подобным.
Вкратце о глюке:
Пишу проект, однажды решил сделать небольшой рефакторинг кода, после чего, во время компиляции делфа стала зависать. Если впервый раз скомпилить проект, все ок, все работает, если что то исправить в модулях использующих ateGeometry и скомпилить снова, то делфа виснет намертво, иногда и компилить не надо, просто попытаться получить всплывающую подсказку для функции, результат тот же - делфа виснет.
Исходники проекта для ознакомления можно скачать по ссылке в 13 посте, инструкции по поимке глюка там же.
Глюк у себя обнаружили как минимум еще двое форумчан.
Глюк стабильно наблюдается в Delphi2006, Delphi2007 и Delphi2009. Очень странно, что Borland/CodeGear до сих пор его не устранили.

Это сообщение отредактировал(а) Louken - 13.4.2009, 01:27
PM MAIL ICQ   Вверх
kemiisto
  Дата 11.4.2009, 22:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Louken, это называется горе от ума. Так не пишут в Delphi! smile Это если коротко...

После каждого нестандартного (т.е. твоего самописного модуля) при подключении его в uses должна быть дописочка in бла-бла-бла:
Код
UnitGameForms in 'UnitGameForms.pas'


Таковой вот ситуации:
Код

uses
  ateUnitEngine, ateUnitMessage, ateUnitInput, ateUnitGUI, ateUnitGeometry,
  ateUnitPerformanceCounter, ateUnitConst, ateUnitLoadTextures, ateUnitUtils, ateUnitModel,
  ateUnitManagerResource, ateUnitOpenGL, ateUnitParticles, ateUnitGUIControl,

вообще быть не должно!

Ручаюсь, что это и есть причина "глюков".

Научись правильно пользоваться инструментом и запомни на будущее Pascal Unit != C++ Header File. Глюк не в компиляторе, а у некоторых в головах.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Louken
Дата 11.4.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.9.2008
Где: Кострома

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



kemiisto
Насчет этого
Цитата

UnitGameForms in 'UnitGameForms.pas'

согласен.
Но уважаемый kemiisto Вы не правы!!!

Создаю новую папку, кидаю туда файл ateGeometry, создаю в ней же файл Project1.dpr
пишу в нем
Код

program Project1;
uses ateUnitGeometry in 'ateUnitGeometry.pas';
begin
end.

Открываю Project1.dpr в Delphi.
Компилирую проект. Пока все в порядке, как и должно быть.
Ставлю курсор между begin и end, жму Ctrl+Space выбираю из списка VectorCross, появляется подсказка о параметрах процедуры, набираю v1, ставлю запятую, во всплывающей подсказке жирным должен выделиться второй параметр, но до этого не доходит, т.к. делфи намертво зависает! Ситуация четко повторяется если делать ровно так, как описано, как в Delphi2007, так и в Delphi2009. Если действовать подругому (каждый раз папку с проектом можно не создавать), то глюк может проявляться по разному.

Так что фразочки типа
Цитата

это называется горе от ума
Научись правильно пользоваться инструментом
Глюк не в компиляторе, а у некоторых в головах

оставьте при себе.

Другими словами, проблемма заключается в модуле ateUnitGeometry, только вот где непонятно.
Я допускаю, что гдето допустил ошибку, но почему компилятор просто мне не показал, где эта ошибка, почему он виснет то? Почему иногда компиляция происходит нормально?

Щас методом копипаста, пытаюсь найти проблеммный участок.
PM MAIL ICQ   Вверх
Louken
Дата 12.4.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.9.2008
Где: Кострома

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



Все, методом проб и ошибок вроде нашел багу. Тьфу тьфу тьфу, чтоб не сглазить.

Если кому интересно, то я удалил в модуле ateGeometry слово type в 364 строчке, т.е. было 
Код

TmtNormalf = type TmtPoint3f;

стало
Код

TmtNormalf = TmtPoint3f;


И вседаки совершенно непонятно, что делфе ненравилось, мистика какая то.
PM MAIL ICQ   Вверх
CodeMonkey
Дата 12.4.2009, 00:47 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Louken, настоятельно рекомендую отправить отчёт об этой проблеме на Quality Central! Особенно, если глюк можно воспроизвести на демо-проекте (приаттачить к отчёту не забудьте). 
Просто вы нашли како-то глюк и можете его воспроизвести - это очень хорошо. Потому что этот же глюк может проявлять себя и в других ситуациях, но в них уже его идентифицировать будет не так просто. Вот почему очень важно, чтобы вы отправили отчёт.


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


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.9.2008
Где: Кострома

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



Итак, результатом нескольких дней поиска мною был сделал маленький пример, на котором легко можно поймать, рассматриваемый в данном топике, глюк:
1. Создаем новую папку
2. В ней создаем два файла Project1.dpr и Geometry.pas
3. Содержание файла Project1.dpr:
Код

program Project1;
uses Geometry in 'Geometry.pas';
begin
end.

4. Geometry.pas:
Код

unit Geometry;

interface

type
  TmtArray3f  = array[0..2] of Single;

  TmtVector3f = record
  private
    FX, FY, FZ: Single;
  public
    property X: Single read FX write FX;
    property Y: Single read FY write FY;
    property Z: Single read FZ write FZ;
    class operator Implicit(const a: TmtArray3f): TmtVector3f;
  end;

  TmtPoint3f = TmtVector3f;
  TmtNormalf = type TmtPoint3f;

function VectorCross(const v1, v2: TmtVector3f): TmtVector3f;

implementation

class operator TmtVector3f.Implicit(const a: TmtArray3f): TmtVector3f;
begin
end;

function VectorCross(const v1, v2: TmtVector3f): TmtVector3f;
begin
end;

end.

5. Открываем Project1.dpr в Delphi
6. Компилируем проект. Компиляция должна быть успешной.
7. Между begin и end пишем VectorCross
8. Ставим "(", дожидаемся появления всплывающей подсказки
9. Печатаем "v1" и ","
10. Это все! Когда во всплывающей подсказке "жирным" должен выделиться второй параметр, IDE Delphi должна зависнуть.
11. Если заменить строчку
Код
TmtNormalf = type TmtPoint3f;

на
Код
TmtNormalf = TmtPoint3f;

то проблемма больше не наблюдается.

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

Отправил отчет об ошибке в CodeGear. Номер отчета 72930, голосуем.

P.S. У меня уже мания началась, я теперь постоянно ожидаю от Delphi, что она зависнет, нескоро смогу оправиться от пережитого шока.
P.P.S. Тем кто делал программу отправки отчета - Quality Central, надо руки оторвать, бездари.
PM MAIL ICQ   Вверх
Louken
Дата 13.4.2009, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 13.9.2008
Где: Кострома

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



ссылка на отчет об ошибке для голосования
Report #72930

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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