СРОЧНО НУЖНА ПОМОЩЬ!!! БЕДА С КОМПИЛЯЦИЕЙ!!!
Компилю проект. Примерно на 50% всё дело виснет и - наглухо. Зпауск с предкомпиляцией ошибок не даёт. В режиме интерпритации приложение работает без сбоев. Машина, на которой производится компиляция - достаточно мощьная. Предыдущие компиляции ошибку не вызывали. В новой версии добавилось лишь несколько новых процедур и новый контрол. Когда компилил "подконтрол". который лежит на этом контроле, а потом собирал деп-файл, дело зависло на подгрузке mscomctrl2. Но я не стал в итоге деп для него собирать и решил mscomctrl2 подцепить к установочному комплекту проекта готового.
Кто знает, отчего могёт "клинить" копилятор? Судя по всему, он где-то входит в цикл, но где и как - не могу понять. Кто сталкивался с бкдой - ПОМОГИТЕ - нужно очень срочно - сегодня нужно сдать проект!!!
Кто могёт помочь, срочно отзовитесь!
Компилю проект. Примерно на 50% всё дело виснет и - наглухо. Зпауск с предкомпиляцией ошибок не даёт. В режиме интерпритации приложение работает без сбоев. Машина, на которой производится компиляция - достаточно мощьная. Предыдущие компиляции ошибку не вызывали. В новой версии добавилось лишь несколько новых процедур и новый контрол. Когда компилил "подконтрол". который лежит на этом контроле, а потом собирал деп-файл, дело зависло на подгрузке mscomctrl2. Но я не стал в итоге деп для него собирать и решил mscomctrl2 подцепить к установочному комплекту проекта готового.
Кто знает, отчего могёт "клинить" копилятор? Судя по всему, он где-то входит в цикл, но где и как - не могу понять. Кто сталкивался с бкдой - ПОМОГИТЕ - нужно очень срочно - сегодня нужно сдать проект!!!
Кто-нибудь знает, как можно просмотреть лог компиляции или как запустить компиляцию из командной строки, потому как мне нужно узнать, где её клинит, но ничего не получается...
ПОМОГИТЕ!!!
НУЖНО ОЧЕНЬ СРОЧНО!!!
Кто-нибудь знает, как можно просмотреть лог компиляции или как запустить компиляцию из командной строки, потому как мне нужно узнать, где её клинит, но ничего не получается...
ПОМОГИТЕ!!!
НУЖНО ОЧЕНЬ СРОЧНО!!!
Знать так. Опять отвечаю сам себе.
1. Нужно убрать ВСЕ неявные преобразования типов. ОСОБЕННО там, где в циклах вызываются процедуры с передачей им по одних и тех же ссылке массивов на заполнение!!! Тоесть, например, если идёт передача массива в процедуру как "процедура Массив()", а процедура принимает как "Процедура (ByRef Массив as Variant)", то нужно это заменить на "Процедура (ByRef Массив() as тип массива)".
2. ВСЕ БОЛЬШИЕ CASE разбить на более мелкие.
3. Если это не поможит, ОТКЛЮЧИТЬ всякую оптимизацию при компиляции.
Блин, вчера чуть ли не основы Ассемблера вспомнить пришлось. Хорошо, что XTremAll помог - бнаружил ошибку передачи массива. Потом уж разобрался я, как компилятор это дело обрабатывает...
Знать так. Опять отвечаю сам себе.
1. Нужно убрать ВСЕ неявные преобразования типов. ОСОБЕННО там, где в циклах вызываются процедуры с передачей им по одних и тех же ссылке массивов на заполнение!!! Тоесть, например, если идёт передача массива в процедуру как "процедура Массив()", а процедура принимает как "Процедура (ByRef Массив as Variant)", то нужно это заменить на "Процедура (ByRef Массив() as тип массива)".
2. ВСЕ БОЛЬШИЕ CASE разбить на более мелкие.
3. Если это не поможит, ОТКЛЮЧИТЬ всякую оптимизацию при компиляции.
Блин, вчера чуть ли не основы Ассемблера вспомнить пришлось. Хорошо, что XTremAll помог - бнаружил ошибку передачи массива. Потом уж разобрался я, как компилятор это дело обрабатывает...
И так, в чем разобрался-то? неужели такая ошибка вешала не готовую программу, а прям процесс компилляции этого куска кода?
И так, в чем разобрался-то? неужели такая ошибка вешала не готовую программу, а прям процесс компилляции этого куска кода?
Да, именно так и было. Даже при запуске проги с предкомпиляцией всё проходило нормально, но при компиляции всё висло.
Сначала я грешил на свои контролы. Потом стал следить за объектными файлами, создаваемыми при компиляции и выяснил, что один из них, соответствующий определённому модулю, который я в большой спешке дописывал (отсюда и неявные преобразования типов - от спешки) создаётся, но не заполняется. Причём процесс C2.exe при его компиляции загружает проц на 100% и циклится.
Полез разбирать модуль. Списался по аське (единственный способ связи с XTremAll'ом), выслал ему код. Вместе перерыли всё. Решили, что кроме одного очень большого CASE и передачи массивов тонких мест нет.
Я целый консилиум собрал. Хотели уже компилятор дезассемблировать. Решили предположить, как он работает. Нашли кусок кода для какого-то сишного компилятора... Разобрали, что и как...
А потом на основании теории нашей о возможности зацикливания компилятора при оптимизации кода под быстрое выполнение поправил - и заработало всё!
А потом кто-то подсказал, что часто такие баги можно поравить отключением опций компиляции, тоесть компилить без оптимизации.
И ёще. Такие баги бывают из - за ошибок в dep - файлах библиотек. Но это оч-ч-ч-ч-чень редко бывает...
А вообще баги бывают и в самом компилляторе, например как-то натолкнулся на баг в Borland C++ 3.какой-то там: конструкция из нескольких операторов условного преехода ставила компилятор в тупик - код компиллил он нормально, токо вот никакого условия отрабатывать не хотел, шагал все время по одному маршруту, я долго пенял на себя, облазил весь код и сократил функцию до одного этого куска, однако ни я ни срочно собранный консилиум не понял что так пугает компиллятор и почему не происходит условного перехода в коде. Поменял в конце концов логику перехода на обратную и все заработало, а воспоминания остались :)
Интересно.
А вообще баги бывают и в самом компилляторе, например как-то натолкнулся на баг в Borland C++ 3.какой-то там: конструкция из нескольких операторов условного преехода ставила компилятор в тупик - код компиллил он нормально, токо вот никакого условия отрабатывать не хотел, шагал все время по одному маршруту, я долго пенял на себя, облазил весь код и сократил функцию до одного этого куска, однако ни я ни срочно собранный консилиум не понял что так пугает компиллятор и почему не происходит условного перехода в коде. Поменял в конце концов логику перехода на обратную и все заработало, а воспоминания остались :)
Да, я уж вчера все страшные истории вспомнил про программеров, которые 2 месяца код писали, а он компилиться отказался:D ;)