Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Audit sagt "Anweisung nicht erreicht". Wieso? (https://www.delphipraxis.net/207032-audit-sagt-anweisung-nicht-erreicht-wieso.html)

TurboMagic 18. Feb 2021 16:02

Audit sagt "Anweisung nicht erreicht". Wieso?
 
Hallo,

warum meint hier das Autit (SU), die kommentierte Zeile wäre nicht erreichbar?

Delphi-Quellcode:
function TMyClass.Parse(var Answer : TBytes;
                        var Paket : TBytes): Byte;
var
  PaketSize : Byte;
  ByteCount : Byte;
begin
  ByteCount := GetReceivedByteCount;

  try
    PaketSize := ByteCount + cMinPaketSize;
  except
    On E:Exception do
    begin
      log.SendException(cCategory, 'Überlauf bei Berechnung der Paketgröße: '+
                        e.Message, e);
// Hier sagt er, das würde nicht erreicht:
// Die Exception wird dich abgefangen und somit bearbeitet.
       PaketSize := 255;
    end;
  end;
Ist das ein False positive?

Der schöne Günther 18. Feb 2021 16:59

AW: Audit sagt "Anweisung nicht erreicht". Wieso?
 
Vielleicht meint er "nicht garantiert erreicht". Die Exception könnte sich ja auch von was anderem als
Delphi-Quellcode:
Exception
ableiten...

himitsu 18. Feb 2021 18:35

AW: Audit sagt "Anweisung nicht erreicht". Wieso?
 
Ja, per se können Exception-Klassen auch von was Anderem abstammen (in der System.pas ist das als TObject deklariert), aber praktisch stammen (normalerweise) alle Exceptions von Exception ab.

Delphi-Quellcode:
  try
    raise TStringList.Create;
  except
    on E: Exception do
      ShowMessage('ja ' + E.ClassName);
    else // bzw.    on E: TObject do
      ShowMessage('ne ' + ExceptObject.ClassName);
  end;
Von alleine passiert sowas aber nicht.
Muß schon wer böswillig eine "falsche" Klasse/Instanz erstellen.
Auch System-Exception werden von der System und SysUtils immer nur in Delphi-Exceptions konvertiert.

PS: Eine "Exception" aus z.B. einer DLL ist nicht mit der "Exception" in der EXE kompatibel ... es sind unterschiedliche Typen (TypeInfo/RTTI), welche nur "zufällig" gleich heißen. (außer bei Verwendung von Laufzeitpackages)

mensch72 18. Feb 2021 22:09

AW: Audit sagt "Anweisung nicht erreicht". Wieso?
 
"PaketSize := ByteCount + cMinPaketSize;"

Wo soll denn da überhaupt eine Exception herkommen ???

-> in all meinen DelphiCode schlägt eine "BYTE" Variable bei "Überlauf" stets ohne eine Exception einfach um, heißt es bleiben nur die unteren 8Bit bleiben übrig.
-> wenn das per Default nicht so wäre, hätten zig CRC und Verschlüsselungsalgos ein Problem, denn da ist SHL/SHR mit absichtlichem BitShift teils ins leere was völlig normales:)

Delphi-Quellcode:
if (Integer(ByteCount)+cMinPaketSize) > 255 then begin
//    log.SendException(cCategory, 'Überlauf bei Berechnung der Paketgröße');
    PaketSize := 255;
end else begin
    PaketSize := ByteCount + cMinPaketSize;
end;

Uwe Raabe 18. Feb 2021 23:06

AW: Audit sagt "Anweisung nicht erreicht". Wieso?
 
Kannst du das an einem Minimalbeispiel reproduzieren?

venice2 18. Feb 2021 23:12

AW: Audit sagt "Anweisung nicht erreicht". Wieso?
 
was willst du denn nun abfangen ByteCount oder PaketSize?

Falls PaketSize dann gehört diese zeile
Delphi-Quellcode:
PaketSize := ByteCount + cMinPaketSize;

über try
Nur so nebenbei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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