<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Structured Exception Handling]]></title><description><![CDATA[<p>Hey,</p>
<p>ich habe eine kurze Frage bezüglich Microsoft's SEH Implementierung unter Windows und C++.</p>
<p>So wie ich die Sache verstehe, nutzt zumindest der VC++ Compiler unter der Haube das Win32 SEH für die C++ standardisierten try-catch Mechanismen, sprich bei einem</p>
<pre><code class="language-cpp">try {
    // Do something
} catch(...) {
    // Handle it
}
</code></pre>
<p>wird ebenfalls ein EXCEPTION_REGISTRATION struct an FS:[0] geschrieben usw.</p>
<p>Macht es dann eigentlich überhaupt einen effektiven Sinn in einem C++ (nicht C) Programm das &quot;native&quot; SEH mit <code>__try</code> , <code>__catch</code> und <code>__finally</code> zu verwenden, wenn man nicht z.B. einen Handler schreibt der irgendwelche Pointer oder sonstwas geradebiegt und die faulting instruction noch mal erneut ausführen lässt? Ein weiteres Beispiel das mir einfallen würde wäre, dass man den Programmstatus und die Register auswerten möchte, weil man die ja so schön über den CONTEXT struct geliefert bekommt. Aber das waren jetzt auch schon die einzigen Beispiele die mir als &quot;Pro&quot; Argument auf Anhieb einfallen...</p>
<p>Für jede Antwort bin ich natürlich dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294992/structured-exception-handling</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 15:11:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294992.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Nov 2011 07:11:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Structured Exception Handling on Sat, 05 Nov 2011 07:11:26 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>ich habe eine kurze Frage bezüglich Microsoft's SEH Implementierung unter Windows und C++.</p>
<p>So wie ich die Sache verstehe, nutzt zumindest der VC++ Compiler unter der Haube das Win32 SEH für die C++ standardisierten try-catch Mechanismen, sprich bei einem</p>
<pre><code class="language-cpp">try {
    // Do something
} catch(...) {
    // Handle it
}
</code></pre>
<p>wird ebenfalls ein EXCEPTION_REGISTRATION struct an FS:[0] geschrieben usw.</p>
<p>Macht es dann eigentlich überhaupt einen effektiven Sinn in einem C++ (nicht C) Programm das &quot;native&quot; SEH mit <code>__try</code> , <code>__catch</code> und <code>__finally</code> zu verwenden, wenn man nicht z.B. einen Handler schreibt der irgendwelche Pointer oder sonstwas geradebiegt und die faulting instruction noch mal erneut ausführen lässt? Ein weiteres Beispiel das mir einfallen würde wäre, dass man den Programmstatus und die Register auswerten möchte, weil man die ja so schön über den CONTEXT struct geliefert bekommt. Aber das waren jetzt auch schon die einzigen Beispiele die mir als &quot;Pro&quot; Argument auf Anhieb einfallen...</p>
<p>Für jede Antwort bin ich natürlich dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140571</guid><dc:creator><![CDATA[SomeCoder]]></dc:creator><pubDate>Sat, 05 Nov 2011 07:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Structured Exception Handling on Sat, 05 Nov 2011 13:13:02 GMT]]></title><description><![CDATA[<p>SEH ist einfach nur die Architektur, mit der Windows Exceptions verarbeitet. Dabei werden Hard- und Software Exceptions zusammengefasst, was ein einheitliches Handling durch die Applikationen ermöglicht. Warum dies Sinn macht, ist auch klar: Wenn jeder Compiler von Grund auf seinen eigenen Mechanismus implementiert, gibt es Probleme bei der Interoperabilität.</p>
<p>Visual C++ (und vermutlich auch der grösste Teil der anderen Compiler) bauen im Prinzip direkt darauf auf, weil es auf Windows Standard ist (ich glaube, SEH wie es heute verbreitet ist, gibt es seit 1994). Auf anderen Betriebssystemen gibt es andere Mechanismen, die man ebenfalls direkt benutzen kann.</p>
<p>Ich würde sagen, es ist nur in den wenigsten Fällen sinnvoll, SEH direkt zu nutzen. In normalen Applikationen sollten Exceptions nicht auf einer so tiefen Ebene abgehandelt werden; wenn du mit Exceptions Pointer alignen und Instruktionen wiederholt ausführen musst, hast du etwas falsch gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140667</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Sat, 05 Nov 2011 13:13:02 GMT</pubDate></item><item><title><![CDATA[Reply to Structured Exception Handling on Sat, 05 Nov 2011 19:06:15 GMT]]></title><description><![CDATA[<p>Danke für die Antwort. So etwas ähnliches hab ich mir schon gedacht, aber es ist immer gut eine klare Aussage von jemandem zu bekommen, der besser in diesen Themen drinstekt als man selbst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140826</guid><dc:creator><![CDATA[SomeCoder]]></dc:creator><pubDate>Sat, 05 Nov 2011 19:06:15 GMT</pubDate></item></channel></rss>