AGB  ·  Datenschutz  ·  Impressum  







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

EDivByZero ohne Sysutils fangen

Ein Thema von Win32.API · begonnen am 4. Aug 2011 · letzter Beitrag vom 4. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:14
Delphi-Version: XE
Hallo Zusammen!

Ich stehe gerade etwas auf dem Schlauch. Wieso fängt Delphi diese Exception nicht:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}
{$O-}

//uses SysUtils; //Ohne Kommentar funktioniert es wunderbar :O

var
  d: Integer;
begin
  try
    d := 0;
    d := d div d;
  except
    writeln('Wer haette es gedacht ...');
  end;
  readln;
end.
Na gut, das es ohne die Sysutils keine EDivByZero Exception gibt ist irgendwie klar, aber ich hätte trotzdem erwartete, dass ich im Except-Zweig lande.

Gibt es eine Möglichkeit, Delphi davon zu Überzeugen, die Exception auch ohne Sysutils im Except-Block zu fangen? SEH per Hand (fs[0] ...), SetUnhandledExceptionFilter oder AddVectoredExceptionHandler würde ich gerne vermeiden.

Schönen Gruß,
Win32.API

Geändert von Win32.API ( 4. Aug 2011 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:19
Bei dem Code wird die Division wegoptimiert.
Jens
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#3

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:26
Im Release-Modus mit {$O+} schon, ich meine aber eigentlich den Debug-Modus mit {$O-} .
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:30
Hast du mal Breakpoints gesetzt?

So kannst du ja ganz leicht feststellen ob und was da wegoptimiert wurde oder auch nicht.
Mach halt im Zweifelsfall mal ein writeln(d); hinter die Division.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General ( 4. Aug 2011 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:33
Du meinst writeln(d);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:37
Öhm.. ja, richtig!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#7

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:41
Mit {$O-} wird nichts "wegoptimiert". Darum geht es hier aber auch nicht, es geht auch nicht darum, ob der Quelltext so Sinn macht oder nicht. Die Frage ist wieso verweigert der Exception-Handler den Dienst, wenn ich die Sysutils nicht einbinde.


Edit: Das Problem ist, dass die Exception geworfen wird, aber der Exception-Handler diese nicht fängt. Das Programm stürzt also ohne Sysutils ab (Projekt 1 funktioniert nicht mehr ...).

Geändert von Win32.API ( 4. Aug 2011 um 15:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:51
Vermutlich weil die SysUtils nicht nur die Exceptionklassen bereitstellt, sondern auch noch so Einiges für die Exception-Behandlung initialisieren/einbinden.

Ohne SysUtils wird bei dieser Exception ein
Zitat:
Halt
ausgeführt und ein entprechender Fehlercode zurückgegeben (ans System).
Die Behandlung bricht also sofort ab und das war's dann, da die Exception unbehandelt bis in System durchgerauscht ist.
$2B or not $2B
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#9

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:52
Mit {$O-} Die Frage ist wieso verweigert der Exception-Handler den Dienst, wenn ich die Sysutils nicht einbinde.
Macht er doch gar nicht, er schreibt doch
Zitat:
Runtime error 200 at 00402482
Es ist halt nicht der aus Sysutils, sondern der, der default da ist (wenn Du VCL benutzt hast Du immer Sysutils).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: EDivByZero ohne Sysutils fangen

  Alt 4. Aug 2011, 15:56
Delphi-Quellcode:
procedure RunErrorAt(ErrCode: Integer; ErrorAtAddr: Pointer);
begin
  ErrorAddr := ErrorAtAddr;
  _Halt(ErrCode);
end;
Ohne SysUtils ladet man dort und mit SysUtils wird stattdessen für bekannte Fehler die entsprechende Exception ausgelöst.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:30 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