sind eines der schlimmsten Dinge, die extremst nerven können.
Seit Tagen suche ich in unserem Code, in Fremdkomponenten und im FinalBuilder Fehler, bei der Umstellung auf 10.4.
Und am Ende stellt sich raus, dass der Fehler im Eurekalog steckt und diese Typen grob fahrlässig sämtliche Compilerwarnungen ignoriert haben.
Fast alles lässt sich nun auf
eine nicht-initialisierte Variable zurückführen.
Delphi-Quellcode:
function InternalExecute: Integer;
begin
...
WriteLine(GetStr(rsELCompiling));
ExitCode := ExecWait(Compiler, Params); //***** call DCC32
if ExitCode = 0 then
begin
...
end
else
WriteError(Format(GetStr(rsELCompileErrorCodeFmt), [ExitCode]));
Result := ExitCode;
...
end;
function Execute: Integer;
function ProtectedExecute: Integer;
begin
...
InternalExecute; //***** the result is lost :(
...
end;
begin
...
Result := ProtectedExecute;
...
end;
Mit dem Ergebnis, dass bei einem Kollegen schonmal im Log alles OK war, aber der Build dennoch abgebrochen war
und bei mir genau andersrum, also alles war angeblich "OK", aber eigentlich gab es noch viele Fehler.
DCC32 oder ECC32 zeigen einen Fehler oder OK, aber dem FinalBuilder und jedem Anderen, der auf den ExitCode/ErrorLevel des ECC hört, wird eventuell (zufällig) was komplett Anderes gesagt.
Auch sind deren Parserfunktionen etwas "speziell".
Gut, dass Eurekalog von
{$LIBSUFFIX AUTO}
noch nichts gehört hat und es deswegen noch fehlt, kann man verstehen,
aber als ich es für uns erstmal implementiert hab und dabei deren Code sah .... da darf in der
DPR kein Leerzeichen zuviel/zuwenig sein, in IFDEF oder Auskommentiert darf sowas auch nicht vorkommen und in eine INC verschoben sowieso nicht ... witzig nur, dass man gerade Sowas in vielen Fremdkomponenten regelmäßig findet, und ganz bestimmt auch in Quellcodes vieler Projekte.
Auch im Debugger können Eurekalog, Madexcept und Co. richtig viel Spaß bereiten, wenn man in deren Hooks landet und nicht mehr raus kommt.
Von abgefangene Fehlern, die wortlos verworfen oder durch nutzlose Fehlertexte ersetze werden,
bzw. wo Fehler neu ausgelöst und dabei die ursprüngliche Fehlermeldung/-position verloren gehen, will man lieber nicht reden.