컴파일 중 ("Delphi IDE
") 때로는 오류 ("메모리 부족")가 표시되고 때로는 성공으로 컴파일되는 DPK 프로젝트가 있습니다.DPK 프로젝트를 컴파일 할 때 Delphi 내부 오류가 발생했습니다.
error F2084: Internal Error: AV004A784A-WFFFD3764-1
누군가가 그것을 해결하는 아이디어가 : 나는 MSBUILD
를 통해 컴파일 할 때 하지만, 항상이 오류 메시지를?
컴파일 중 ("Delphi IDE
") 때로는 오류 ("메모리 부족")가 표시되고 때로는 성공으로 컴파일되는 DPK 프로젝트가 있습니다.DPK 프로젝트를 컴파일 할 때 Delphi 내부 오류가 발생했습니다.
error F2084: Internal Error: AV004A784A-WFFFD3764-1
누군가가 그것을 해결하는 아이디어가 : 나는 MSBUILD
를 통해 컴파일 할 때 하지만, 항상이 오류 메시지를?
내부 오류는 컴파일러 오류입니다. 우리는 그들을 해결할 수 없으며 컴파일러 개발자 만 그렇게 할 수 있습니다. Embarcadero에 버그 보고서를 제출해야합니다. XE3의 고대 성을 감안할 때 수정 사항을받을 가능성은 거의 없습니다.
최신 버전의 Delphi에서는 메모리 오류가 발생하기 쉽지 않으므로 업그레이드가 옵션 인 경우 문제가 발생할 가능성이 있습니다.
업그레이드가 불가능한 경우 이러한 오류 중 하나가 발생할 때마다 계속 혼란스러워하고 저주해야합니다.
이것은 실제로 매우 일반적입니다 (적어도 이러한 종류의 오류는 매우 자주 발생했습니다). 필자는 작업을 컴파일 할 때까지 DPK에서 소스 코드 파일을 단계적으로 제거하는 접근 방식을 사용했습니다. 이 방법을 사용하면 어떤 파일이 이러한 오류의 원인인지 알 수 있습니다. 그런 다음 문제가되는 행을 찾을 때까지이 파일의 소스 코드 부분을 단계적으로 주석 처리 한 다음 다시 작성하십시오 (직접 찾아야하는 방식으로).
David Heffernan이 이미 말했듯이, 오류는 컴파일러 나 링커 내부에 있기 때문에 실제로 해결할 방법은 없으며 이것들의 개발자 만이 버그를 제거 할 수 있습니다.
그러나 종종 몇 가지 해결 방법이 있습니다.
내 경험에 비추어 볼 때 이러한 내부 오류는 제네릭 및 익명 메서드 또는 인라인 된 코드와 관련이 있습니다. 특히 두 개 또는 전부를 결합하면 더욱 그렇습니다.
내부 오류가 발생하기 전에 어떤 코드를 변경했는지 확인하십시오. 버전 관리 시스템 또는 Delphi의 내부 _history 시스템을 사용하는 경우 오류가 사라질 때까지 이전 버전으로 복원하십시오. 그런 다음 "위반하는"코드와 다른 점을 확인하고 내부 오류를 일으킨 코드를 확인할 수 있습니다.
너무 복잡한 표현식 (특히 위에서 언급 한 유형의 경우)으로 인해 내부 오류가 발생할 수 있습니다. 이 경우 먼저 하위 표현식을 계산하여 표현식을 단순화하십시오. 또한, 대신
x := TList<SomeType<Integer>>.Create;
같은 임시 일반적인 선언을 사용하면 미리 정의 된 유형을 사용하려고합니다 찾을 즉
type
SomeTypeInteger = SomeType<Integer>;
SometypeList = TList<SomeTypeInteger>;
...
x := SometypeList.Create;
,
당신이 그렇게한다면, 당신은 내부 오류를 방지에서 성공 수를 때까지 종류에게 코드를 표현하는 다른 방법으로
다행히도 최신 컴파일러에서는 이러한 오류가 거의 발생하지 않습니다.