AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dunkelgrüner Breakpoint ?

Ein Thema von EccoBravo · begonnen am 20. Okt 2005 · letzter Beitrag vom 21. Okt 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#11

Re: dunkelgrüner Breakpoint ?

  Alt 20. Okt 2005, 17:19
Das ist es ja eben, mein richtiger Code ist genauso wie der Pseudocode, keine Probleme ersichtlich, worüber der Optimizer stolpern könnt. den richtigen Code anzuhängen, würde Euch und die Seitre überfordern, daher nur ein Ausschnitt, der repitorisch wiederholt wird

Delphi-Quellcode:

   ...

   while (iStart < fmax) and (FeldNr<11) do
    begin
        addr:='';
        addr:=addr+IntToHex(buff1[aStart],2);
        addr:=addr+IntToHex(buff1[aStart+1],2);
        addr:=addr+' ';
        addr:=addr+IntToHex(buff1[aStart+2],2);
        addr:=addr+IntToHex(buff1[aStart+3],2);

        if addr='FEFF 00E0'      then begin
                                      if param in['a','p','f'] then begin
                                          j:=j+1;
                                      end;
                                      aStart:=aStart+8; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 1600'  then begin
                                      if param in['a'] then begin
                                          j:=j+1;
                                          Plan.Inhalt1:= Lesen(lStart,iStart,Lang);
                                      end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 1800'  then begin
                                      if param in['a'] then begin
                                          j:=j+1;
                                          Plan.Inhalt2:= Lesen(lStart,iStart,Lang);
                                      end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 2000'  then begin
                                      if param in['a','p'] then begin
                                          j:=j+1;
                                          Plan.Inhalt3:= Lesen(lStart,iStart,Lang);
                                      end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 3000'  then begin
                                      if param in['a','p'] then begin
                                          j:=j+1;
                                          Plan.Inhalt4:= Lesen(lStart,iStart,Lang);
                                      end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 3010'  then begin
                                      if param in['a','p'] then begin
                                          j:=j+1;
                                          Plan.Inhalt5:= Lesen(lStart,iStart,Lang);
                                      end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 5000'  then begin
                                      if param in['a'] then begin
                                          j:=j+1;
                                          Plan.Inhalt6:= Lesen(lStart,iStart,Lang);
                                       end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end
        else if addr='0800 6000'  then begin
                                      if param in['a','p'] then begin
                                          j:=j+1;
                                          Plan.Inhalt7:= Lesen(lStart,iStart,Lang);
                                      end
                                      else lang:= Laenge_bestimmen(lStart);
                                      aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                  end

   ...

   ...

   ...


       else if addr='0C30 5100then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt1:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end
       else if addr='0C30 4200then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt2:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end
       else if addr='0C30 6A00then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt3:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end
       else if addr='0C30 A000then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt4:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end
       else if addr='0C30 0A00then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt5:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end
       else if addr='0AC30 1800then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt6:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end
       else if addr='0AC30 2300then begin
                                    if param in['a'] then begin
                                         j:=j+1;
                                         Feld[FeldNr].Inhalt7:= Lesen(lStart,iStart,Lang);
                                     end
                                     else lang:= Laenge_bestimmen(lStart);
                                     aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
                                end


       else begin
             if param in['a'] then begin
                 j:=j+1;
                 Feld[FeldNr].Inhalt8:= Lesen(lStart,iStart,Lang);
             end
             else lang:= Laenge_bestimmen(lStart);
             aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8;
       end;
  
   end;

   ...
Mit diesem Programm wird der Inhalt aus einem File herausgefiltert.
Es sind etwa 170 else if Sequenzen.
Die Variable j wird später als Zählergebnis gebraucht.
Ich hoffe, Ihr könnt damit was anfangen

Danke E. B.
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#12

Re: dunkelgrüner Breakpoint ?

  Alt 20. Okt 2005, 17:23
Es muss keine Probleme geben, damit optimiert wird. Es reicht, wenn sie einen besseren Weg kennt.
Es muss auch nicht immer ein fehlerhafter oder schlechter Code sein, wenn er wegoptimiert wird. In deinem Fall denke ich allerdings, dass ein case-Konstrukt besser wäre.
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#13

Re: dunkelgrüner Breakpoint ?

  Alt 20. Okt 2005, 17:27
Danke aber Case geht nur bei ordinalen Typen, welcher addr nicht ist.

Gruß

E. B.
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#14

Re: dunkelgrüner Breakpoint ?

  Alt 20. Okt 2005, 17:50
Wenn ich das Richtig sehe sind das auch nur hexadezimale Zahlen als String verpackt.

Aber überhaupt mal zu den Funktionen. Seh ich das richtig, dass du überall haargenau das gleiche machst und sich nur der "Empfänger" für die lesen-Funktion ändert? Das ist aber auch etwas aufwändig. Kein Wunder, dass da die Compilermagic zuschlägt. Da solltest du dir ne Zuordnung zwischen addr und "Empfänger" überlegen, anhand derer du das richtige Ziel findest und dann nur an einer Stelle rechnen.
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#15

Re: dunkelgrüner Breakpoint ?

  Alt 21. Okt 2005, 00:06
Hallo EccoBravo!

Hast Du den fehlerhaft reagierenden Code vielleicht nicht direkt in Delphi eingetippt, sondern irgendwoher übernommen (Copy&Paste, Einlesen einer Fremddatei)?
Dann kann es sein, daß die Zeilenwechsel nicht korrekt dargestellt sind. Unter Windows muß das #$0D#$0A sein - also CR und LF. Andere Systeme kommen mit CR oder LF alleine aus. Die Delphi-IDE zeigt das dann korrekt an, aber Compiler und Debugger funktionieren nicht richtig.

Abhilfe: Die .PAS-Datei mal in Notpad einlesen und wieder abspeichern. Alternativ geht auch ein Mini-Programm, das die Datei in eine StringList einliest (LoadFromFile) und dann wieder speichert (SaveToFile).

Irgendwie verstehe ich nicht, daß bisher niemand da drauf gekommen ist - das Problem taucht doch mindestens zweimal pro Monat auf!

Gruß

Dietmar Brüggendiek
Dietmar Brüggendiek
Die 6 Probleme des Programmierers: 1. dauert das länger, als man 2. glaubt, 3. geht das nicht so, wie man sich das 4. schlau überlegt hat, und 5. sitzt der Fehler da, wo man ihn 6. zuletzt sucht
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#16

Re: dunkelgrüner Breakpoint ?

  Alt 21. Okt 2005, 05:58
Zitat von EccoBravo:
aber so ganz glaube ich das nicht, denn die blauen Punkte stehen nicht vor Kommentarzeilen, und END-Zeilen. Dafür stehen sie ganz willkürlich innerhalb von BEGIN...END-Bereichen (mal ja mal nicht) vor ausführbaren Zeilen.
Sorry, falsch ausgedrückt. Der blaue Punkt befindet sich nur bei Ausführbaren zeilen. Insofern passt es mit den Punkten zwischen begin...end
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz