Блогът на GunSmoker (преводи) Получих вътрешна грешка в Delphi

. когато промяната на съзнанието става толкова лесна, колкото програмирането на компютър, какво означава да си човек.

Имате вътрешна грешка в Delphi?

Това е превод на системата за помощ на Delphi.

Съобщението за грешка Вътрешна грешка: X1234 показва, че компилаторът е срещнал някаква ситуация, различна от синтактична грешка и не може да продължи компилирането.Подсказка: Вътрешният код за грешка кодира файла и реда в източниците на компилатора, където е възникнала грешката. Тази информация може да помогне на техническата поддръжка да идентифицира проблема. Не забравяйте да запишете тази информация и да я прикачите към вашия доклад за грешка.

Как да се отървете от вътрешна грешка

Ако проблемът все още съществува

  • Изтрийте всички .dcu(il) файлове, свързани с вашия проект.
  • Затворете напълно вашия проект (Файл/Затваряне на всички).
  • Отворете отново проекта си. Това ще изчисти кеша на модула в IDE. Като алтернатива можете да рестартирате IDE.
  • Друг вариант е да опитате да прекомпилирате приложения с помощта на командата Build (не Compile) - в този случай компилаторът ще изгради отново всички dcu(il) файлове.
Ако грешката продължава, затворете IDE и опитайте да прекомпилирате приложението с помощта на компилатора на командния ред (dcc(il).exe). Това ще елиминира кеширането на единици в IDE от разглеждане.

Прегледайте кода си от последната промяна

След като сте успели да изолирате проблема, не е лоша идея да направите възможно най-малкия проект за тестов случай, който демонстрира възникването на вашата грешка, и да го изпратите на Quality Central.

Други начини да се отървете от вътрешни грешки

  • Ако проблемът е свързан с цикли, опитайте да промените for на while/repeatили обратното.
  • Ако проблемът възниква във вложени функции, опитайте да ги направите глобални.
  • Ако проблемът възникне при преобразуване на типове, опитайте да използвате друго преобразуване на типове, което е подобно по значение, или използвайте временни променливи.
  • Ако проблемът възниква в оператора with, опитайте да го премахнете и да го напишете изрично.
  • Опитайте да изключите оптимизацията (Проект/Опции/Компилатор).
Когато нищо не работи

Обикновено има много различни части от код, които могат да постигнат целта, от която се нуждаете. Можете да опитате да се отървете от грешката, като промените кода. Опитайте се просто да пренапишете кода от нулата, за да направите това, което искате, но просто го направете по различен начин. Избраното от вас решение може да не е оптимално, но поне можете да продължите да работите върху приложението си. Ако имате най-новата версия на компилатора - проверете кода си в него. Ако проблемът се повтори - изпратете, както преди, минимална демонстрация на проблема до Quality Central. Ако няма проблем, значи този бъг на компилатора вече е отстранен.

IDE конфигурация за минимизиране на вероятността от вътрешна грешка

Създайте една директория, където ще се намират всички ваши .dcp(il) файлове. Например, създайте директорията C:\DCPIL и в Tools Environment/Options/Library задайте изходната директория на DCP(IL) на C:\DCPIL. Тази настройка гарантира, че всички .dcp(il) файлове, генерирани от компилатора, отиват в една и съща папка и следователно са най-новите. Това е полезна опция, ако премествате пакет от една директория в друга. Можете също да създадете директория за .dcu(il) файлове, като използвате изходната директория Project/Options/Directories/Conditionals/Unit.

Смисълът на тези промени е винаги да използвате най-новитеверсии на вашите .dcu(il) и .dcp(il). В противен случай може да срещнете вътрешни грешки.