AGB  ·  Datenschutz  ·  Impressum  







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

Codeoptimierung verursacht probleme

Ein Thema von EWeiss · begonnen am 20. Jan 2017 · letzter Beitrag vom 20. Jan 2017
Antwort Antwort
Seite 1 von 3  1 23      
EWeiss
(Gast)

n/a Beiträge
 
#1

Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 09:47
Warum verursacht die Code Optimierung wenn eingeschaltet unterschiedliche
Ansichten der Grafischen Oberfläche?

Wenn ausgeschaltet sieht alles normal aus wenn ein wird es Unansehnlich nicht so wie es soll.
Wenn nötig hänge ich zwei Bilder an.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 10:02
Wenn die Code-Optimierung Probleme verursacht, dann liegt meiner Erfahrung nach zu 99% irgendwo ein Programmierfehler vor (Ausnahmen bestätigen natürlich die Regel). Insbesondere Buffer-Overflows werden manchmal erst durch die Optimierung enttarnt. Schalte am besten mal alle Überlaufprüfungen an - vielleicht hast du ja Glück und stößt direkt auf die verantwortliche Stelle.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 10:15
Zitat:
Schalte am besten mal alle Überlaufprüfungen an
Ok Danke werde ich mal machen.

Nebenbei die DLL ist dann auch kleiner wenn die Optimierung eingeschaltet ist.
Bringt mir nur nichts wenn sich dadurch die Ansichten verändern.

Hänge mal die Bilder an.
Ausgeschalteter zustand ist korrekt.

EDIT:
Er gibt mir einen ErangeError sagt aber nicht wo.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:45 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 11:51
Hallo,
MadExcept zeigt dir die Stelle an.
Das muss aber auch mit der IDE gehen,
wenn der RangeError kommt, F7 drücken.
Heiko
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 12:03
Hallo,
MadExcept zeigt dir die Stelle an.
Das muss aber auch mit der IDE gehen,
wenn der RangeError kommt, F7 drücken.
Danke.
Wenn der Dialog erscheint zeigt er mir nichts wenn ich F7 drücke mit D2010

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 12:59
Beispiel..

SetRect(pr^[pData^.rdh.nCount], M, J, I, J + 1);
nCount ist DWORD die Übergabe muss aber Integer sein.

Es kracht wenn die Werte minus enthalten

Das
SetRect(pr^[Integer(pData^.rdh.nCount)]
bringt nichts.
Das ist der Grund warum ich keine Bereichs Prüfung einschalte.

gruss

Geändert von EWeiss (20. Jan 2017 um 13:29 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 13:45
EDIT:
Er gibt mir einen ErangeError sagt aber nicht wo.
Weiß ja nicht, ob das früher anderes war, aber wenn man das Programm aus der IDE heraus im Debugger laufen lässt, kommt in der Regel eine Messagebox hoch, wo man auf Break/Anhalten klicken kann.
Außer natürlich, du hast ERangeError irgendwann mal ganz klugerweise auf ignorieren gestellt.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 13:58
EDIT:
Er gibt mir einen ErangeError sagt aber nicht wo.
Weiß ja nicht, ob das früher anderes war, aber wenn man das Programm aus der IDE heraus im Debugger laufen lässt, kommt in der Regel eine Messagebox hoch, wo man auf Break/Anhalten klicken kann.
Außer natürlich, du hast ERangeError irgendwann mal ganz klugerweise auf ignorieren gestellt.
Nö nur wo man OK klicken kann.
Und nein bei mir werden alle Native BS Exceptions behandelt.

Mit MadExcept geht's aber ich kann die ERangeError's nicht behandeln.
Ich speicher verschiedene Datentypen in propertys wenn dieses Property den Bereich eines Integer verlässt also minus wird
kracht es das kann ich aber nicht ändern.

Delphi-Quellcode:
procedure TSkinEngine.SetProperty(WinHandle: HWND; Item: integer; V: integer);
begin
  if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then
    SetWindowLong(WinHandle, (Item - 1) * 4, V);

end;
Delphi-Quellcode:
function TSkinEngine.GetProperty(WinHandle: HWND; Item: integer): integer;
begin
  Result := 0;

  if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then
    Result := GetWindowLong(WinHandle, (Item - 1) * 4);

end;
Sagen wir mal das Property das gelesen wird ist ein HDC und dieses hat einen negativen wert -123134345
Dann tritt ein ERangeError auf.

Ich kann aber bei GetWindowLong kein DWORD zurückgeben und es erwartet einen Integer für Index.
Ich wüsste jetzt nicht wie ich das behandeln sollte.

Erweitertes Beispiel:
SkinEngine.SetProperty(Handle, PROP_TEXT_COLOR, TextCol);

TextCol wird jetzt in das Property gespeichert.
TextColor ist COLORREF also DWord kann minus werte enthalten und das verletzt die Untergrenze (Integer). outofbounds

gruss

Geändert von EWeiss (20. Jan 2017 um 14:19 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 14:17
Beispiel..

SetRect(pr^[pData^.rdh.nCount], M, J, I, J + 1);
nCount ist DWORD die Übergabe muss aber Integer sein.

Es kracht wenn die Werte minus enthalten

Das
SetRect(pr^[Integer(pData^.rdh.nCount)]
bringt nichts.
Das ist der Grund warum ich keine Bereichs Prüfung einschalte.

gruss
Wenn du das ein bisschen entzerren würdest, wäre dir auch klarer woher der Fehler kommt.
Delphi-Quellcode:
var
  KlugbenanntesRect: TRect;
  RectCount: DWORD;
...
begin
  
  SetRect(KlugbenanntesRect, M, J, I, J + 1);
  RectCount := pData^.rdh.nCount;
  if (RectCount > 0) and (RectCount < Length(pr^)) then
  begin
    pr^[RectCount] := KlugbenanntesRect;
  end;
end;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 14:22
Beispiel..

SetRect(pr^[pData^.rdh.nCount], M, J, I, J + 1);
nCount ist DWORD die Übergabe muss aber Integer sein.

Es kracht wenn die Werte minus enthalten

Das
SetRect(pr^[Integer(pData^.rdh.nCount)]
bringt nichts.
Das ist der Grund warum ich keine Bereichs Prüfung einschalte.

gruss
Wenn du das ein bisschen entzerren würdest, wäre dir auch klarer woher der Fehler kommt.
Delphi-Quellcode:
var
  KlugbenanntesRect: TRect;
  RectCount: DWORD;
...
begin
  
  SetRect(KlugbenanntesRect, M, J, I, J + 1);
  RectCount := pData^.rdh.nCount;
  if (RectCount > 0) and (RectCount < Length(pr^)) then
  begin
    pr^[RectCount] := KlugbenanntesRect;
  end;
end;
Mag ja sein das ich damit den Fehler behandeln könnte aber es gibt noch genug andere die nicht zu beheben sind.
Der Datentypen mismatch halt.
Siehe die anderen Beispiele weiter oben.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 18:24 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