<?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[globaler exception handler]]></title><description><![CDATA[<p>hallo,</p>
<p>wir (das CTeam2005) arbeiten momentan an einem ... naja, doch etwas größerem Projekt.<br />
jedenfalls wollten wir am Ende dem Nutzer die Möglichkeit geben, im Falle eines Absturzes,<br />
uns eine E-Mail zu schicken.<br />
Soll heißen:</p>
<p>Programm stürzt ab -&gt; Fenster erscheint mit Fehlermeldung -&gt; Button &quot;E-Mail an die Entwickler&quot;</p>
<p>das Programm würde an der Stelle gleich noch nen Screenshot machen und verschiedene Informationen (Registerbelegung usw.)<br />
mitschicken. Der Nutzer kann unter Umständen eine eigene Nachricht noch mitgeben.</p>
<p>Jetzt das Problem:<br />
kann ich den Exception Handler global machen?<br />
oder muss ich überall try-catch-Blöcke setzen um das Vorhaben zu realisieren?</p>
<p>und die nächste Frage:<br />
wie kann ich bei catch(...) herausfinden, was genau passiert ist?<br />
denn wenn ich einen anderen Typ angebe, wird die exception ja nur gefangen, wenn diese auch von diesem Typ ist.</p>
<p>schonmal danke für Hilfe,</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199164/globaler-exception-handler</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 20:51:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199164.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Nov 2007 14:36:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 14:36:30 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>wir (das CTeam2005) arbeiten momentan an einem ... naja, doch etwas größerem Projekt.<br />
jedenfalls wollten wir am Ende dem Nutzer die Möglichkeit geben, im Falle eines Absturzes,<br />
uns eine E-Mail zu schicken.<br />
Soll heißen:</p>
<p>Programm stürzt ab -&gt; Fenster erscheint mit Fehlermeldung -&gt; Button &quot;E-Mail an die Entwickler&quot;</p>
<p>das Programm würde an der Stelle gleich noch nen Screenshot machen und verschiedene Informationen (Registerbelegung usw.)<br />
mitschicken. Der Nutzer kann unter Umständen eine eigene Nachricht noch mitgeben.</p>
<p>Jetzt das Problem:<br />
kann ich den Exception Handler global machen?<br />
oder muss ich überall try-catch-Blöcke setzen um das Vorhaben zu realisieren?</p>
<p>und die nächste Frage:<br />
wie kann ich bei catch(...) herausfinden, was genau passiert ist?<br />
denn wenn ich einen anderen Typ angebe, wird die exception ja nur gefangen, wenn diese auch von diesem Typ ist.</p>
<p>schonmal danke für Hilfe,</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412320</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Thu, 29 Nov 2007 14:36:30 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 14:49:11 GMT]]></title><description><![CDATA[<p>als &quot;globalen&quot; exceptionhandler wuerde ich es bezeichnen, wenn du alles, was innerhalb der main() passiert, in einen try-block schiebst und jedwede exception abfaengst. Fuer die Behandlung wuerde ich mir dann ne Klasse schreiben die moeglichst exceptionsafe ist. Wenn du noch mehr abfangen willst, schau dir mal die Doku zu set_unexpected() und set_termiante() an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412333</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 29 Nov 2007 14:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 14:51:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Du kannst einen Exception-Handler in deine main-Funktion einbauen. Dann landen da alle exceptions die nicht gefangen werden. Deswegen kannst du ja trotzdem noch weiter try/catch-Blöcke in dein Programm einfügen. Wenn du willst kannst du ja nach Abarbeitung mit throw die Exception weiter werfen.<br />
Bei catch(...) kannst du eben nichts rausbekommen. Deswegen solltest du wenigstens eine catch(std::exception&amp; e) machen. Dann fängst du hier alles was von std:.exception abgeleitet ist. Darunter kannst du dann ja noch weitere catch-Blöcke anlegen für den Rest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412337</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 29 Nov 2007 14:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 14:54:21 GMT]]></title><description><![CDATA[<p>Also eine typische Vorgehensweise ist folgende, dass man alle Exceptions nach oben weitergibt. Ein Projekt besteht ja aus verschiedenen Modulen, und jedes Modul gibt dabei seine Excetions mittels throw dem Aufrufer weiter. Meistens ist es dann so, dass diese dann (in mehreren try/catch-Blöcken) von dem &quot;obersten&quot; Modul gefangen wird, welches diese dann z.B. entsprechend &quot;ausgibt&quot; (das könnte z.B. die GUI sein). D.h. dann treten auch mehrere try/catch-Blöcke auf. Da könnt ihr dann ja eine zentrale Funktion aufrufen mit der jeweiligen Exception als Übergabeparameter, welche dann diese Fehlermeldung mit EMail-Versand usw. anzeigt.</p>
<p>So damit zum catch(...): Oft hat man tatsächlich mehrere catch-Blöcke in denen man eben die verschiedenen Exception-Typen fängt. Wenn man aber schon ganz genau weiß, dass man immer dasselbe machen will (in eurem Fall z.B. diese Funktion aufrufen), dann könnte man auch einfach ein catch()-Block machen, in dem man die oberste Exception-Klasse abfängt (das hat zur Folge, dass auch alle vererbten Exceptions gefangen werden... sollte auch in C++ so sein, hoffe dass ich da jetzt nix falsches sage).<br />
Hintergrund ist der, dass ja normalerweise jede Exception &quot;gleich&quot; ist (sprich sie hat ne message, evtl. eine root-Exception, evtl. StackTrace, usw...). Sie unterschieden sich eigentlich nur durch ihren Klassentyp, d.h. man hat eine Hierachie von Exceptions, normalerweise alle von einer Oberklasse (z.b. std::exception) abgeleitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412342</guid><dc:creator><![CDATA[nep]]></dc:creator><pubDate>Thu, 29 Nov 2007 14:54:21 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 15:33:13 GMT]]></title><description><![CDATA[<p>die Frage ist jetzt, welchen Datentyp haben exceptions, die von Ansi-C Funktionen<br />
oder WinAPI-Funktionen thrown?</p>
<p>denn in C gab es ja noch kein std::exception.<br />
werfen die dann zahlen, deren Bedeutung irgendwo dokumentiert ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412389</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Thu, 29 Nov 2007 15:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 16:28:59 GMT]]></title><description><![CDATA[<p>*grübel* mir war nicht bekannt, dass es in ANSI C schon exceptions gegeben haben soll. Dachte immer die sind erst mit C++ eingeführt worden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412437</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 29 Nov 2007 16:28:59 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 17:04:00 GMT]]></title><description><![CDATA[<p>-.- ok...</p>
<p>und wie kann ich dann Speicherzugriffsverletzungen von C-Funktionen abfangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412450</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Thu, 29 Nov 2007 17:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 17:12:26 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Entweder verarbeiten C-Funktionen Speicherzugriffsfehler intern und geben den Mißerfolg per Rückgabe bekannt oder Windows kümmert sich mit einer Allgemeinen Schutzverletzung drum.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412455</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 29 Nov 2007 17:12:26 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 17:56:09 GMT]]></title><description><![CDATA[<p>Mal was allgemeines @Drako:<br />
Speicherzugriffsverletzungen resultieren im Prinzip immer aus Programmierfehlern heraus. Das hat mit Exceptions eigentlich null zu tun. Exceptions sind, wie der Name schon sagt, eben für Ausnahmen da, und NICHT zum Abfangen von Programmierfehlern. D.h. hier sind Exceptions fehl am Platz.</p>
<p>Ansonsten:<br />
Wenn ihr von eurem C++-Projekt aus mit älteren C Frameworks/APIs oder sonst was arbeiten müsst (wie z.B. der WinAPI), dann könnt ihr in euren Funktionen, in denen ihr z.B. auf WinAPI-Funktionen zugreift die Rückgabewerte auswerten und anhanddessen selbst entsprechende Exceptions nach außen schmeissen.<br />
Mal ein abstraktes Beispiel:</p>
<pre><code class="language-cpp">//Read ist eine reine C-Funktion und gibt die Anzahl gelesener Zeichen zurück.
//Wenn irgendwas schief ging beim Lesen, dann wird -1 zurückgegeben
//Ist natürlich kein tolles Beispiel, aber viele alte C Funktionen geben oft //irgendwelche int's für mögliche Fehlerzustände zurück, deshalb doch ganz //brauchbar als Beispiel
int read(char* buffer) 
{
   ...
}
</code></pre>
<p>In eurer eigenen Funktion könntet ihr jetzt z.B. sowas machen:</p>
<pre><code class="language-cpp">void myfunc()
{
   int ret = read(...);
   if (ret == -1) {
        throw eReadException(); 
   }
}
</code></pre>
<p>eReadException wäre dann natürlich eine eigens von euch erstellte Exception-Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412488</guid><dc:creator><![CDATA[nep]]></dc:creator><pubDate>Thu, 29 Nov 2007 17:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to globaler exception handler on Thu, 29 Nov 2007 19:16:31 GMT]]></title><description><![CDATA[<p>wie man sowas macht weiß ich auch xD</p>
<p>es geht viel mehr darum, dass (vor allem beim Umgang mit Zeigern) C-Funktionen überhaupt keine Überprüfung durchführen.<br />
Somit stürzt das Programm ab, bevor man den Rückgabewert prüfen kann.</p>
<p>Außerdem soll das ganze ja Debug-Zwecken dienen, falls eben ein Programmierfehler<br />
(ein falscher Zeiger oder was weiß ich) aufgetreten ist,<br />
damit man diesen recht schnell findet.</p>
<p>-&gt; ich weiß auch, was ein Debugger ist,<br />
aber es geht viel mehr darum, dass wir auch nicht auf allen möglichen PCs testen können.<br />
und im schlimmsten Fall hat irgendein Nutzer einen PC mit einem Windows, bei dem<br />
irgendeine Funktion nicht funktioniert, dann könnte er uns das komfortabel mitteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1412538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1412538</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Thu, 29 Nov 2007 19:16:31 GMT</pubDate></item></channel></rss>