[gelöst] Wie finde ich einen Umbenennungsfehler heraus?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
alfware17
Beiträge: 121
Registriert: Di 14. Dez 2010, 23:27

[gelöst] Wie finde ich einen Umbenennungsfehler heraus?

Beitrag von alfware17 »

Hallo,
ich stehe vor einem Rätsel. ich habe bei einem Programm etwas "Kosmetik" betrieben und gerade gerückt, sicher nicht dem Standard folgend aber so wie ich momentan gerade formatieren mag.

Wenn ich das Programm "vorher" compiliere und "nachher" compiliere, entstehen leider 2 verschiedene EXE-Files. Die MD5-Summe ist unterschiedlich und viele Bytes der neuen EXE sind genau um hexadezimal 20 größer (ich habe TotalCommander zum Vergleich benutzt). Leider kann ich mir keinen Reim darauf machen, wie diese Differenz entsteht. Ein Funktionstest steht noch aus, aber das Phänomen beunruhigt mich erst mal.

Was habe ich schon probiert: Die Quelltexte, ALLE LEERZEICHEN ELIMINIERT (das habe ich grade noch so hinbekommen), enthalten die gleichen Zeilen und Zeichen.
Meine Folgerung: ich habe irgendwo in den Strings ein Leerzeichen übersehen.
Ja ich habe bei der Kosmetik automatisches Ersetzen gemacht zb ': ' in '; ' (mit Space) usw. Die gröbsten Schnitzer habe ich auch gefunden und rückgängig gemacht, leider finde ich das letzte nicht.

Der Compiler (FPC 3.22) und meine UNITs sind jedesmal die gleichen. Die Stringkonstanten scheinen (jetzt) auch alle gleich angelegt zu sein - damit hatte ich alle Differenzen (bis auf eine???) herausgefunden. Allerdings geht das mit dem um hexadezimal 20 größeren Bytes schon gleich am Anfang der EXE mit einem Byte los.

Nach meiner Vorstellung sollte doch der Quelltext die gleiche EXE liefern, egal wie die Variablen, Prozeduren usw heißen. Für mich wäre es ein Beweis, daß ich richtig "Kosmetik" betrieben habe und mir nicht einen Bug reingebaut, der nachher die Funktion beeinflußt.
Dadurch, daß ich schon mal gecheckt habe, ob alle anderen Zeichen außer Spaces übereinstimmen und beide Quellen compilierbar waren, habe ich doch das Problem schon eingegrenzt oder? Was sollen mir diese hexadezimal 20 sagen? Ist es eine Checksumme?

Ich würde ungern "neu" verwerfen und noch mal neu automatisch umbenennen. Natürlich habe ich jetzt mehr Erfahrung und weiß jetzt, welche Reihenfolge ich einhalten muß, weil der Teufel mit den Spaces vor den < oder : oder = (nur Beispiele) im Detail liegt. Ob "alt" funktionell alles kann, ist auch nicht gesagt, sonst müßte ich auf einen Stand von vorgestern gehen, aber ich suche optisch lieber in "neu" als in "alt".

Hat Lazarus eine automatische Formatierung? Vielleicht kann man auch "alt" und "neu" automatisch formatieren und dann schauen, wo der Unterschied wäre, denn es werden ja wohl automatisch nur die Zeilen und Zeichen außerhalb der Stringkonstanten verschoben?

Ich hänge mal meine Quellen in die Anlage - das Projekt ansich oder mögliche Anfängerfehler müssen nicht diskutiert werden, nur warum die EXE alt nicht so wie die EXE neu aussieht...

Vielen Dank für Tips

P.S. Anhang wieder entfernt, zu viel Drumherum wegen einem Space :-)
Zuletzt geändert von alfware17 am Fr 18. Aug 2023, 09:21, insgesamt 2-mal geändert.

Mathias
Beiträge: 6120
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Wie finde ich einen Umbenennungsfehler heraus?

Beitrag von Mathias »

Hat Lazarus eine automatische Formatierung? Vielleicht kann man auch "alt" und "neu" automatisch formatieren und dann schauen, wo der Unterschied wäre, denn es werden ja wohl automatisch nur die Zeilen und Zeichen außerhalb der Stringkonstanten verschoben?
Wen du reine Code-Formatierung meinst, drücke einfach mal Crtl+D.
Die kann natürlich seinen eigenen Wünschen angepasst werden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

alfware17
Beiträge: 121
Registriert: Di 14. Dez 2010, 23:27

Re: Wie finde ich einen Umbenennungsfehler heraus?

Beitrag von alfware17 »

Mathias hat geschrieben:
Do 17. Aug 2023, 14:08
[Wen du reine Code-Formatierung meinst, drücke einfach mal Crtl+D.
Die kann natürlich seinen eigenen Wünschen angepasst werden.
Wo kann man denn mal nachlesen, wie man die Formatoptionen genau ändert? Meine Wünsche wären so auf Anhieb, die Schlüsselwörter sollen groß bleiben und er soll das mit dem Result bei Funktionen lassen - sonst geht mir die Quelle nicht mehr im Turbo Pascal durch :-)

alfware17
Beiträge: 121
Registriert: Di 14. Dez 2010, 23:27

Re: Wie finde ich einen Umbenennungsfehler heraus?

Beitrag von alfware17 »

In der Zeile 900 des "neuen" Quelltextes ist der Fehler. EIn Space zuviel im IF Ausdruck. Entstanden durch automatisches Umbenennen und Space-Einfügen hier von : bei den VAR, den := usw.
Dummerweise ist die betroffenene Prozedur recht zentral (wird 7x benutzt), daher die ganzen EXE-Abweichungen (223). Verdammt. EIgentlich hätte die EXE auch schon ein paar Bytes größer werden können.

Code: Alles auswählen

PROCEDURE Buff_Name(von,bis,start: LONGINT; mitTemp: BOOLEAN);
VAR
  d: LONGINT;
  fname: STRING;
BEGIN
  FOR d:=von TO bis DO BEGIN
    fname:=tempbest+'.'+Str0Long(d-von+start+temperst-1,3);
    IF mitTEMP AND (tempverz <> '') THEN BEGIN
      IF fname[2] = ': ' THEN     (* <--- da :-( *)
        IF fname[3] = '\'
          THEN fname:=COPY(fname,4,strmax)
          ELSE fname:=COPY(fname,3,strmax);
        fname:=tempverz+'\'+fname;
    END;
    ASSIGN(datei[d].name,fname);
    {$IFNDEF DOS} SetTextBuf(datei[d].name,datei[d].buft); {$ENDIF}
  END
END;                                                                     
Gefunden habe ich es nur, nachdem ich mal Quelle "alt" und Quelle "neu" automatisch formatiert habe und dann wieder verglichen, da waren nicht 344 sondern nur noch 23 Unterschiede und die habe ich alle untersucht.

Die automatische Formatierung gefällt mir aber nicht, macht die Quellen um 10KByte größer. Ich hatte die gerade per Hand kleiner gemacht :-) und außerdem ist da noch viel Nacharbeit nötig, also nichts mit automatisch. Aber als Mittel zum Fehlerfinden war es gut
Zuletzt geändert von alfware17 am Fr 18. Aug 2023, 09:24, insgesamt 1-mal geändert.

Mathias
Beiträge: 6120
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst] Wie finde ich einen Umbenennungsfehler heraus?

Beitrag von Mathias »

Die automatische Formatierung gefällt mir aber nicht, macht die Quellen um 10KByte größer. Ich hatte die gerade per Hand kleiner gemacht :-) und außerdem ist da noch viel Nacharbeit nötig, also nichts mit automatisch.
Du musst es nur richtig konfigurieren, von Haus auf ist es schlecht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten