Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.iso-c++ > #1972

Re: Exception mit Durchfall?

From Stefan Reuther <stefan.news@arcor.de>
Newsgroups de.comp.lang.iso-c++
Subject Re: Exception mit Durchfall?
Date 2016-11-24 19:15 +0100
Organization A noiseless patient Spider
Message-ID <o17e8r.4ng.1@stefan.msgid.phost.de> (permalink)
References <o0mvct$30v$1@news2.open-news-network.org> <o0s0q8.2so.1@stefan.msgid.phost.de> <o14123$9bf$1@news2.open-news-network.org>

Show all headers | View raw


Am 23.11.2016 um 13:11 schrieb Edzard Egberts:
> Stefan Reuther wrote:
>> Am 18.11.2016 um 14:23 schrieb Edzard Egberts:
>>> Unter Linux beendet das Programm kommentarlos, unter Windows erscheint
>>> die Message_Error() aus dem catch-Zweig und ein Fenster "Microsoft
>>> Visual C++ Runtime Library" "This application has requested the runtime
>>> to terminate in an unusual way". Das erscheint mir widersprüchlich.
>>
>> Das klingt, als ob irgendwo mittendrin 'abort', wahrscheinlich ausgelöst
>> von 'terminate', aufgerufen wird.
> 
> Dazu habe ich nichts im Quelltext gefunden.

Natürlich nicht, das macht ja auch die Runtime.

> Ansonsten kann ich also zu Recht davon ausgehen, dass eine Exception
> nicht irgendwo den Ausgang nimmt, sondern immer durchgereicht wird?
> Ich habe das gesamte Programm in einer try-catch(...), aber da ist
> noch nie ein Absturz angekommen.

try-catch ist kein magisches "du kommst hier nicht raus außer an mir
vorbei". Neben exit(), assert() o.ä. sowie den Syscalls der Wahl (z.B.
kill()) ist da eben noch die Möglichkeit, dass während des Aufräumens
auf dem Weg zum catch eine weitere Exception geworfen wird. Und dann ist
halt Ende.

>> angehalten, hier ist der Backtrace"), setze einen Breakpoint auf
>> __cxa_throw, das ist die Library-Funktion fürs Exception-Werfen.
> 
> Aha, funktioniert blendend, fängt unter Linux aber trotzdem nicht das
> Programmende ab. IMHO bedeutet das, der Prozess wurde von außen beendet.
> Mein Test fängt das wahrscheinlich ab, da damit noch ein wenig Speicher
> übrig ist.

Was heißt denn "funktioniert blendend" praktisch? Ich hätte jetzt nicht
erwarten, dass das Setzen des Breakpoints scheitert :-)

>> Blind raten würde ich, dass da irgendwo ein Destruktor rumhängt, der
>> wieder eine Exception wirft.
> 
> Wäre das ein neuer Pfad, der nicht abgefangen wird?

Das ist ein Pfad, der nicht abgefangen werden kann. Das Programm kann ja
schlecht sagen "whoops, das Zerstören dieses Objektes beim Verlassen der
Funktion schlug fehl. Bauen wir das Objekt halt wieder hin und bleiben
in der Funktion". Und deswegen wird da das Programm beendet (terminate,
abort).


  Stefan

Back to de.comp.lang.iso-c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Exception mit Durchfall? Edzard Egberts <news@edzeg.net> - 2016-11-18 14:23 +0100
  Re: Exception mit Durchfall? Stefan Reuther <stefan.news@arcor.de> - 2016-11-20 11:18 +0100
    Re: Exception mit Durchfall? Edzard Egberts <news@edzeg.net> - 2016-11-23 13:11 +0100
      Re: Exception mit Durchfall? Stefan Reuther <stefan.news@arcor.de> - 2016-11-24 19:15 +0100
        Re: Exception mit Durchfall? Edzard Egberts <news@edzeg.net> - 2016-11-25 08:11 +0100
          Re: Exception mit Durchfall? Stefan Reuther <stefan.news@arcor.de> - 2016-11-25 18:07 +0100
            Re: Exception mit Durchfall? Edzard Egberts <news@edzeg.net> - 2016-11-28 08:21 +0100
              Re: Exception mit Durchfall? Stefan Reuther <stefan.news@arcor.de> - 2016-11-28 17:49 +0100

csiph-web