<?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[Try - Catch]]></title><description><![CDATA[<p>Hallo ihr,</p>
<p>Ich habe bisher immer darauf geachtet, dass meine Programme so wenige Fehler, wie moeglich enthalten.<br />
Je nachdem, wie gross das Projekt wird verliert man jedoch auch oft die Uebersicht, da es Schleifen gibt, die je nach Benutzereingabe auf tausend Verschiedene Art und Weisen reagieren koennen.<br />
Mein Fazit darauf war: Wenn man keinen IQ von 300 hat gibt es in jedem komplexeren Programm immer Fehler.<br />
Ganz besonders dann, wenn es um Arrays, ihren Index und tausende von Abstraktionen geht.</p>
<p>Ich habe mir nun ueberlegt, dass ich in meinem momentanen Projekt alle kritischen Stellen in ein Try - Catch packe und die Fehler einfach verschlucke, die auftreten.<br />
Selbstverstaendlich heisst das nicht, dass ich mir keine Gedanken mehr um das machen will, was ich programmiere.<br />
Aber es ist doch besser als dem Enduser ein Programm zu schreiben, was bei einer falschen Eingabe gleich abstirbt, weil dieser eine bestimmte Fall eventuell nicht beruecksichtigt war.</p>
<p>Ich wollte euch aber zuerst jetzt mal fragen, wie ihr das macht.<br />
Wie geht ihr mit Fehlerbehandlung und ganz besonders mit dem sagenumwobenen Try-Catch um?</p>
<p>Wie oft verwendet ihr es?<br />
Haltet ihr es fuer Sinnvoll es immer zu verwenden, wenn in Schleifen auf die Elemente von sequenziellen Kontainern zugegriffen wird, wo alle moeglichen Dinge passieren koennen?</p>
<p>Wie sehr ihr das?<br />
Kennt ihr eventuell einen Abschnitt, der sich damit beschaeftigt?</p>
<p>Vielen Dank fuer alle eure Antworten.</p>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232357/try-catch</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:51:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232357.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Jan 2009 20:18:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Try - Catch on Wed, 21 Jan 2009 20:18:36 GMT]]></title><description><![CDATA[<p>Hallo ihr,</p>
<p>Ich habe bisher immer darauf geachtet, dass meine Programme so wenige Fehler, wie moeglich enthalten.<br />
Je nachdem, wie gross das Projekt wird verliert man jedoch auch oft die Uebersicht, da es Schleifen gibt, die je nach Benutzereingabe auf tausend Verschiedene Art und Weisen reagieren koennen.<br />
Mein Fazit darauf war: Wenn man keinen IQ von 300 hat gibt es in jedem komplexeren Programm immer Fehler.<br />
Ganz besonders dann, wenn es um Arrays, ihren Index und tausende von Abstraktionen geht.</p>
<p>Ich habe mir nun ueberlegt, dass ich in meinem momentanen Projekt alle kritischen Stellen in ein Try - Catch packe und die Fehler einfach verschlucke, die auftreten.<br />
Selbstverstaendlich heisst das nicht, dass ich mir keine Gedanken mehr um das machen will, was ich programmiere.<br />
Aber es ist doch besser als dem Enduser ein Programm zu schreiben, was bei einer falschen Eingabe gleich abstirbt, weil dieser eine bestimmte Fall eventuell nicht beruecksichtigt war.</p>
<p>Ich wollte euch aber zuerst jetzt mal fragen, wie ihr das macht.<br />
Wie geht ihr mit Fehlerbehandlung und ganz besonders mit dem sagenumwobenen Try-Catch um?</p>
<p>Wie oft verwendet ihr es?<br />
Haltet ihr es fuer Sinnvoll es immer zu verwenden, wenn in Schleifen auf die Elemente von sequenziellen Kontainern zugegriffen wird, wo alle moeglichen Dinge passieren koennen?</p>
<p>Wie sehr ihr das?<br />
Kennt ihr eventuell einen Abschnitt, der sich damit beschaeftigt?</p>
<p>Vielen Dank fuer alle eure Antworten.</p>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1649842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1649842</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Wed, 21 Jan 2009 20:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Wed, 21 Jan 2009 21:35:30 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Ich habe mir nun ueberlegt, dass ich in meinem momentanen Projekt alle kritischen Stellen in ein Try - Catch packe und die Fehler einfach verschlucke, die auftreten.</p>
</blockquote>
<p>Einfach verschlucken - ist das nicht eine der Methoden, die Apple ganz gerne anwendet, damit der Benutzer nur keine Fehlermeldung sieht?</p>
<p>Als ich das letzte Mal jemandem dabei helfen durfte, über iTunes ein iPhone und Outlook 2003 zu synchronisieren, bekam ich immerhin eine &quot;Es trat ein Fehler auf.&quot;-Nachricht. Anscheinend mutet Apple Windows-Benutzern wenigstens generische Fehlermeldungen zu.</p>
<p>777 schrieb:</p>
<blockquote>
<p>Aber es ist doch besser als dem Enduser ein Programm zu schreiben, was bei einer falschen Eingabe gleich abstirbt, weil dieser eine bestimmte Fall eventuell nicht beruecksichtigt war.</p>
</blockquote>
<p>Als Anwender mag man sich über eine kryptisch anmutende Meldung ärgern, aber der Entwickler (also du) sollte froh sein, einen etwas ausführlicheren Bugreport als &quot;das Programm stürzte ab&quot; bekommen zu können.</p>
<p>777 schrieb:</p>
<blockquote>
<p>Ich wollte euch aber zuerst jetzt mal fragen, wie ihr das macht.<br />
Wie geht ihr mit Fehlerbehandlung und ganz besonders mit dem sagenumwobenen Try-Catch um?</p>
<p>Wie oft verwendet ihr es?</p>
</blockquote>
<p>In Windows-Anwendungen so gut wie überhaupt nicht. Das UI-Framework (VCL) fängt Exceptions, die in Event-Handlern auftreten - und so ziemlich jede potentiell fehlerträchtige Situation wird über einen solchen induziert - und zeigt dem Benutzer die Fehlermeldung (Exception::Message oder auch <a href="http://www.audacia-software.de/de/bcb/external-exception-eefface.htm" rel="nofollow">std::exception::what()</a>) an. Mit geeigneten 3rd-Party-Plug-ins kann man auch einen Stacktrace generieren und als Bugreport versenden lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1649880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1649880</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 21 Jan 2009 21:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Wed, 21 Jan 2009 22:11:30 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Es gibt dazu was im <a href="http://magazin.c-plusplus.net/artikel/Exception-Handling" rel="nofollow">Magazin</a>. Shade hat dazu auch noch ein paar gute Artikel fürs Magazin verfasst. Die findest Du <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-219864.html" rel="nofollow">hier</a> und <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-219865.html" rel="nofollow">hier</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1649901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1649901</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 21 Jan 2009 22:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 12:31:14 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Ich wollte euch aber zuerst jetzt mal fragen, wie ihr das macht.<br />
Wie geht ihr mit Fehlerbehandlung und ganz besonders mit dem sagenumwobenen Try-Catch um?</p>
</blockquote>
<p>Exceptions haben nicht das Ziel, Programmierfehler wieder gut zu machen. Die musst du schon vorher beheben.</p>
<p>Vielmehr können damit unerwartete Laufzeitfehler signalisiert werden. Beispielsweise, wenn eine Ressource nicht geladen werden kann (z.B. Datei). Oder wenn eine Funktion nicht in der Lage ist, ihre Arbeit wie gewollt zu erledigen. Oder wenn ein Objekt nicht konstruiert werden kann. Oder... Der Indexzugriff auf Container ist ein Streitfall. Du kannst natürlich den Benutzer direkt zugreifen lassen, z.B. so:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; Vec;
int Index;
std::cin &gt;&gt; Index;

try
{
    std::cout &lt;&lt; Vec.at(Index);
}
catch (std::out_of_range&amp; e)
{
    std::cout &lt;&lt; &quot;Fehlerhafter Index.&quot;;
}
</code></pre>
<p>Aber gut ist das nicht wirklich. Die Eingabe sollte sowieso geprüft werden. Tatsächlich kommt es auch selten dazu, dass der Benutzer direkt einen Index angeben muss, auf den er zugreift.</p>
<p>777 schrieb:</p>
<blockquote>
<p>Haltet ihr es fuer Sinnvoll es immer zu verwenden, wenn in Schleifen auf die Elemente von sequenziellen Kontainern zugegriffen wird, wo alle moeglichen Dinge passieren koennen?</p>
</blockquote>
<p>Wenn alle möglichen Dinge passieren können, hast du etwas falsch gemacht. Wie meinst du das konkret? Du solltest dir schon im Klaren darüber sein, was passieren kann. Und gegebenenfalls Fehler (die zur Laufzeit entstehen) ordentlich zu behandeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650130</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Jan 2009 12:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 13:06:41 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Wie geht ihr mit Fehlerbehandlung und ganz besonders mit dem sagenumwobenen Try-Catch um?</p>
</blockquote>
<p>Fehlerbehandlung kann sehr einfach sein, wenn du dir igendwie dokumentierst, welche Fehler wann wo auftreten können und wie sie behandelt werden. Bei eigenen und/oder kleinen Projekten kann eine simple Textdatei reichen. Dabei sollte man sich <em>erst</em> überlegen, wie man den Fehler behandelt, dann einen Satz mit der passenden Stellenangabe in die Textdatei schripseln und anschließend die Fehlerbehandlung einbauen. Ist wirklich nicht viel Arbeit, nicht mal eine Minute pro Fehler, der auftreten kann und man nimmt der Fehlerbehandlung ihre komplette Undurchsichtigkeit, die sie typischerweise hat.<br />
Beispiel:</p>
<pre><code>- Fehlerbehandlung -

- Beim Startup des Programms wird versucht, die Config-Datei zu laden (main.cpp, Funktion &quot;Init&quot;). Wenn das schiefgeht, default-Config-Datei anlegen, keine Warnung ausgeben.

- Im Dialog &quot;Datei konvertieren&quot; wird im Editfeld (ID_EDIT_123) ein Pfad angegeben. Bei einem Klick auf OK (ConvertDlg.cpp, OnOkClicked) wird
die Datei geladen. Wenn sie nicht gefunden oder geöffnet werden kann, wird eine Message-Box gezeigt und die OK-Aktion abgebrochen.
</code></pre>
<p>Natürlich ist das nicht geeignet für z.B. Index-Überschreitungs-Exceptions, aber von denen halte ich eh nicht viel. Da verlasse ich mich eher auf asserts, Crashs und vom Debugger erkannte Heap-/Stack-Corruptions.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650161</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 22 Jan 2009 13:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 13:13:28 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Beispiel:</p>
<pre><code>- Fehlerbehandlung -

- Beim Startup des Programms wird versucht, die Config-Datei zu laden (main.cpp, Funktion &quot;Init&quot;). Wenn das schiefgeht, default-Config-Datei anlegen, keine Warnung ausgeben.

- Im Dialog &quot;Datei konvertieren&quot; wird im Editfeld (ID_EDIT_123) ein Pfad angegeben. Bei einem Klick auf OK (ConvertDlg.cpp, OnOkClicked) wird
die Datei geladen. Wenn sie nicht gefunden oder geöffnet werden kann, wird eine Message-Box gezeigt und die OK-Aktion abgebrochen.
</code></pre>
</blockquote>
<p><strong>lol</strong><br />
das wird kein mensch durchhalten. code und fehlerbehandlungsvorhabensbeschreibungsdatei divergieren.<br />
statt solche vorhaben vorzuhaben und dir vorsätze vorzusetzen, solltest du die fehler einfach behandeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650168</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 22 Jan 2009 13:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 13:21:24 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>das wird kein mensch durchhalten. code und fehlerbehandlungsvorhabensbeschreibungsdatei divergieren.</p>
</blockquote>
<p>Wenn in diesem Detailgrad, ja. Lässt sich bei mehr dann aber auch einiges zusammenfassen oder allgemeiner fassen und eine Doku zur Fehlerbeschreibung ist nunmal Gold wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650184</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 22 Jan 2009 13:21:24 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 13:23:47 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Doku zur Fehlerbeschreibung ist nunmal Gold wert.</p>
</blockquote>
<p>nö.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650186</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 22 Jan 2009 13:23:47 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 13:26:03 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>das wird kein mensch durchhalten. code und fehlerbehandlungsvorhabensbeschreibungsdatei divergieren.</p>
</blockquote>
<p>Wenn in diesem Detailgrad, ja. Lässt sich bei mehr dann aber auch einiges zusammenfassen oder allgemeiner fassen und eine Doku zur Fehlerbeschreibung ist nunmal Gold wert.</p>
</blockquote>
<p>Im Prinzip ja, nur schreibt man in die Doku:</p>
<pre><code class="language-cpp">/**
...
 \throws IOException
...
*/
void loadConfig(string const&amp; path) {
...
}
</code></pre>
<p>und nichts anderes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650189</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 22 Jan 2009 13:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 13:31:19 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>[code]<br />
- Beim Startup des Programms wird versucht, die Config-Datei zu laden (main.cpp, Funktion &quot;Init&quot;). Wenn das schiefgeht, default-Config-Datei anlegen, keine Warnung ausgeben.<br />
[(code]</p>
</blockquote>
<pre><code class="language-cpp">void Init()
{
...
   if(!loadConfig(&quot;user.ini&quot;))
      if(!loadConfig(&quot;default.ini&quot;))
         throw fileNotFoundError(&quot;default.ini&quot;);
...
}
</code></pre>
<p>vermutlich die drei zeilen in eine eigene funktion stecken, damit die Init klarer wird.<br />
dein absichtsdatei legt sogar fest, daß nicht ausgelagert wird und daß die funktion Init in der main.cpp bleiben soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650197</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 22 Jan 2009 13:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 14:02:29 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Doku zur Fehlerbeschreibung ist nunmal Gold wert.</p>
</blockquote>
<p>nö.</p>
</blockquote>
<p>*seufz* Alleine schon, weil Fehlerbehandlung (wenn man die Mikro-Ebene ausschließt) das Verhalten der Software bestimmt und Verhalten dokumentiert gehört.</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p><code>\throws IOException</code><br />
und nichts anderes...</p>
</blockquote>
<p>Achtlos. Dann hast du nämlich keine Ahnung, wie oder ob überhaupt darauf reagiert wird. Typisch Exceptions - du gibst einfach die Verantwortung ab und am Ende hat sie keiner. Meiner Meinung nach muss man eindeutig festschreiben, wann die Software wie zu reagieren hat. Eben auch bei Fehlerbehandlung.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>dein absichtsdatei legt sogar fest, daß nicht ausgelagert wird und daß die funktion Init in der main.cpp bleiben soll.</p>
</blockquote>
<p>Das Beispiel ist (wie auch geschrieben) nur für eigene (wo's egal ist) und sehr kleine Projekte gedacht. Die Stellenangabe sollte nur den aktuellen Standort festhalten, kann man natürlich machen wie man will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650225</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 22 Jan 2009 14:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 14:25:48 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Achtlos. Dann hast du nämlich keine Ahnung, wie oder ob überhaupt darauf reagiert wird. Typisch Exceptions - du gibst einfach die Verantwortung ab und am Ende hat sie keiner. Meiner Meinung nach muss man eindeutig festschreiben, wann die Software wie zu reagieren hat. Eben auch bei Fehlerbehandlung.</p>
</blockquote>
<p>Äh. Dann hast du Exceptions nicht verstanden.</p>
<p>loadConfig _darf_ nicht wissen wie es auf einen Fehler reagiert. Die Verantwortung hat der Caller.</p>
<blockquote>
<p>Das Beispiel ist (wie auch geschrieben) nur für eigene (wo's egal ist) und sehr kleine Projekte gedacht. Die Stellenangabe sollte nur den aktuellen Standort festhalten, kann man natürlich machen wie man will.</p>
</blockquote>
<p>Das bedeutet doppelte Arbeit: Programmierer muss Code und Doku ändern ohne dass sich etwas relevantes geändert hat.</p>
<p>Furchtbar sowas. Sowas führt zu unwartbarem Code. Hatte da mal ein Projekt übernommen wo die Doku sehr genau war und der Code schlecht. Das Problem dabei war nun dass der Code sich anders verhalten hat als die Doku...</p>
<p>Ne ne ne. Bloss nie nie nie 2 parallele Code Basen führen. Die laufen async. Und zwar garantiert.</p>
<p>Es gibt veraltete Ansätze wo man versucht über Doku schlechten Code wettzumachen - aber das führt einfach nicht zum Ziel. Doku muss den Code ergänzen und darf ihn nie nie nie selber definieren.</p>
<p>Vorallem da es unterschiedliche Leute sind die loadConfig schreiben und die die es aufrufen. Sind ja uU sogar andere Firmen. Wie kann der loadConfig programmierer das wissen haben? Kann er eben nicht. Deshalb: loadConfig wirft ne exception oder returned einen Wert wenn die Config nicht geladen werden kann.</p>
<p>Denn zB wenn ich<br />
foo --with-config=config.cfg<br />
mache dann muss es ein Fehler sein<br />
wenn ich aber<br />
foo<br />
mache dann muss er die default.cfg laden.</p>
<p>Der richtige Platz das zu dokumentieren ist in der CLI Doku für den Enduser und uU in den internen style guidelines.</p>
<p>aber sicher nicht in der code doku.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650242</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 22 Jan 2009 14:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 15:19:31 GMT]]></title><description><![CDATA[<p>Also ich benutze Try-Catch in einer Datenbanksoftware, die ich fuer<br />
unsere Firma programmiert habe.<br />
Eigentlich ist es ein normaler Datenbankclient, der nichts anderes tut als Querys zu erstellen um Datensaetze zu loeschen, zu aendern, hinzuzufuegen etc.<br />
Alles das wird so erledigt, dass beim Start alle Werte zuerst in einen Vektor geladen werden.<br />
Durch Sachen, wie 'Autovervollstaendigung' etc ist das Programm aber irgendwann so komplex gewesen, dass es mir als Einzelperson unmoeglich wird alle besonderen Eingaben des Benutzers zu beruecksichtigen.<br />
Daher kam auch meine Frage.</p>
<p>Aber ich danke euch dennoch fuer eure Antworten und werd mal sehn, was ich daraus machen kann...werde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650298</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Thu, 22 Jan 2009 15:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 17:23:46 GMT]]></title><description><![CDATA[<p>Shade, ich denke du hast überhaupt nicht verstanden, was ich eigentlich gesagt hab. Ich werd's mal anders formulieren:<br />
Die eigentlich Frage war, wie wir es handhaben, in einem komplexeren Projekt Übersicht über die Fehlerbehandlung behalten. Ich meine dazu, dass Dokumentation hier enorm hilft. Und zwar muss irgendwo - scheißegal wo - für den/die Entwickler dokumentiert/spezifiziert sein, wie auf welche Ausnahme reagiert wird.<br />
Was du missverstanden hast: Natürlich kann das nicht bei Libraries oder einzelnen Funktionen passieren, sondern im Gesamtkontext der Software. Es soll also nicht zu der Funktion &quot;LoadConfig&quot; dokumentiert werden, wie die Ausnahme behandelt wird, sondern global.</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Der richtige Platz das zu dokumentieren ist in der CLI Doku für den Enduser und uU in den internen style guidelines.</p>
</blockquote>
<p>Jein. In die Doku für den Endnutzer braucht natürlich nur das rein, was ihn auch angeht und überhaupt betrifft.</p>
<p>Kleines Beispiel, wo mich fehlende Fehler-Doku genervt hat: Auf mehrere Computer verteilte Berechnungen, ein Durchlauf dauert etwa 3 Wochen. Es gibt unheimlich viele Fehlerquellen und öfters kommt der Durchlauf nicht zu Ende, im schlimmsten Fall wird nach 2,5 Wochen eine Exception geworfen, die den Lauf beendet. Jetzt wollte ich natürlich stärkere Exception-Toleranz einbauen, z.B. durch Ignorieren (mit späterem Nutzer-Report), Wiederholen, Korrekturen versuchen, Rollbacks, ggf Nutzerinteraktion usw. Ohne Doku hast du aber keinen Überblick, was in den tausenden von Zeilen alles an Ausnahmen auftauchen können, also musst du Großteile des Codes durchgehen und dir alle Fehlerfälle zusammenklauben um für sie jeweils einen passenden Ausnahmeweg zu konstruieren, was einfach verflucht viel Arbeit ist. Mit Doku hättest du eben eine Übersicht, welche Ausnahmen auftreten können und wie und wo sie momentan behandelt werden. Und ja, die Schattenseite einer Dokumentation ist immer ihre Aktualität, dafür kann sie enorm viel Arbeit ersparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650394</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 22 Jan 2009 17:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Thu, 22 Jan 2009 22:09:10 GMT]]></title><description><![CDATA[<p>Badestrand, nimm mal die Rosa-Doku-Brille ab.<br />
Nichts ist schlimmer als vom Code getrennte Dokumentation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650573</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 22 Jan 2009 22:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 00:10:21 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Nichts ist schlimmer als vom Code getrennte Dokumentation.</p>
</blockquote>
<p>Definitiv. Ist aber kein allzu großes Problem, wenn die Auflistung von möglichen Fehlerfällen und deren Behandlung abstrakt genug ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650609</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 23 Jan 2009 00:10:21 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 00:47:20 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Nichts ist schlimmer als vom Code getrennte Dokumentation.</p>
</blockquote>
<p>Definitiv. Ist aber kein allzu großes Problem, wenn die Auflistung von möglichen Fehlerfällen und deren Behandlung abstrakt genug ist.</p>
</blockquote>
<p>Natürlich. Bloss Papier ist geduldig. Und irgendwelche Text-Files oder sonstige Dokumente die irgendwo rumliegen sind genauso geduldig.<br />
Nur weil in &quot;Error handling rules for project XYZ.txt&quot; irgendwas drinnen steht, heisst das noch lange nicht dass es auch so ist <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/1650621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650621</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Jan 2009 00:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 03:50:19 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p><code>\throws IOException</code><br />
und nichts anderes...</p>
</blockquote>
<p>Achtlos. Dann hast du nämlich keine Ahnung, wie oder ob überhaupt darauf reagiert wird. Typisch Exceptions - du gibst einfach die Verantwortung ab und am Ende hat sie keiner.</p>
</blockquote>
<p>Typisch uncatched Exceptions, bei denen übernimmt nur das OS die Verantwortung indem es dien Programm terminiert. Bei catched Exceptions bekommst du nen Compileerror und musst die Verantwortung übernehmen, aber weil ne ganze Menge schlechter Javaprogrammierer die Verantwortung schlecht übernommen hat, gelten die jetzt auch als schlecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650631</guid><dc:creator><![CDATA[kugelecke]]></dc:creator><pubDate>Fri, 23 Jan 2009 03:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 03:54:24 GMT]]></title><description><![CDATA[<p>Edit: Man ersetze *catched duruch *checked</p>
<p>Typisch unchecked Exceptions, bei denen übernimmt nur das OS die Verantwortung indem es dien Programm terminiert. Bei checked Exceptions bekommst du nen Compileerror und musst die Verantwortung übernehmen, aber weil ne ganze Menge schlechter Javaprogrammierer die Verantwortung schlecht übernommen hat, gelten die jetzt auch als schlecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650632</guid><dc:creator><![CDATA[kugelecke]]></dc:creator><pubDate>Fri, 23 Jan 2009 03:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 05:03:28 GMT]]></title><description><![CDATA[<p>Typisch dummes Kommentar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650635</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Jan 2009 05:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 07:55:06 GMT]]></title><description><![CDATA[<p>kugelecke schrieb:</p>
<blockquote>
<p>Typisch uncatched Exceptions</p>
</blockquote>
<p>uncatched steht nicht im wörterbuch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650663</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 23 Jan 2009 07:55:06 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 08:50:25 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Natürlich kann das nicht bei Libraries oder einzelnen Funktionen passieren, sondern im Gesamtkontext der Software. Es soll also nicht zu der Funktion &quot;LoadConfig&quot; dokumentiert werden, wie die Ausnahme behandelt wird, sondern global.</p>
</blockquote>
<p>Das essentielle ist aber, dass loadConfig eine IOException wirft. Je nach Kontext aus dem loadConfig aufgerufen wird muss der Fehler anders behandelt werden.</p>
<p>Wenn du aber jede Funktion die einen Fehler verursachen kannst extra dokumentieren willst - ne das hoffe ich mal nicht.</p>
<p>Was dagegen Sinn machen kann ist zu sagen &quot;Wenn das Starten der Anwendung nicht möglich ist, dann schreib einen syslog eintrag&quot; oder derartiges. Aber dann bist du eh wieder so abstrakt dass das mit dem Code selber ja nichts mehr zu tun hat - das ist dann einfach die Doku des Programmverhaltens.</p>
<blockquote>
<p>Ohne Doku hast du aber keinen Überblick, was in den tausenden von Zeilen alles an Ausnahmen auftauchen können, also musst du Großteile des Codes durchgehen und dir alle Fehlerfälle zusammenklauben um für sie jeweils einen passenden Ausnahmeweg zu konstruieren, was einfach verflucht viel Arbeit ist.</p>
</blockquote>
<p>Dafür hast du ja die Code Dokumentation: calcX wirft X, Y und Z exceptions.</p>
<p>uU willst du eher sowas wie Javas checked exceptions?</p>
<blockquote>
<p>Mit Doku hättest du eben eine Übersicht, welche Ausnahmen auftreten können und wie und wo sie momentan behandelt werden. Und ja, die Schattenseite einer Dokumentation ist immer ihre Aktualität, dafür kann sie enorm viel Arbeit ersparen.</p>
</blockquote>
<p>Ich bin ja _für_ doku aber keine parallele sondern eine Code Doku und das ist auch genau das was dir hier geholfen hätte mit automatisierungen.</p>
<p>Meistens reicht aber ein catch(exception&amp; e) aus, da dich der genaue Fehler idR eh nicht interessiert. Viel interessanter ist es dagegen rauszufinden wo du die neustarts ansetzen musst.</p>
<p>Wenn du das weisst, kannst du mit automatischen tools dir alle exceptions anzeigen lassen die da geworfen werden können (wenn du eine ordentliche doku hast).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1650674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1650674</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 23 Jan 2009 08:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 18:32:13 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Wenn du das weisst, kannst du mit automatischen tools dir alle exceptions anzeigen lassen die da geworfen werden können (wenn du eine ordentliche doku hast).</p>
</blockquote>
<p>Also ein Tool, dass das kann, was ein Compiler bei checked Exceptions kann, sogar wenn die Doku schlecht ist oder einen Tippfehler hat. Also falls einer mal throwed statt throws oder catched statt checked schreibt - soll so Leute geben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651076</guid><dc:creator><![CDATA[kugelecke]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 19:00:35 GMT]]></title><description><![CDATA[<p>kugelecke schrieb:</p>
<blockquote>
<p>Also falls einer mal throwed statt throws oder catched statt checked schreibt - soll so Leute geben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Deshalb bekommst du eine Warnung von doxygen wenn du einen unbekannten tag angegeben hast...</p>
<p>das zauberwort heisst hier: automatisierung</p>
<p>dann existieren solche probleme garnicht erst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651098</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 23 Jan 2009 19:00:35 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 19:51:09 GMT]]></title><description><![CDATA[<p>kugelecke schrieb:</p>
<blockquote>
<p>Also falls einer mal throwed statt throws oder catched statt checked schreibt - soll so Leute geben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>da macht man erstmal<br />
#define throwed thrown<br />
#define catched caught<br />
oder sowas. die ganzen ausländischen wörter kann man sich ja gar nicht merken.<br />
und sucht dann erst weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651137</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 23 Jan 2009 19:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to Try - Catch on Fri, 23 Jan 2009 20:14:46 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>kugelecke schrieb:</p>
<blockquote>
<p>Also falls einer mal throwed statt throws oder catched statt checked schreibt - soll so Leute geben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Deshalb bekommst du eine Warnung von doxygen wenn du einen unbekannten tag angegeben hast...</p>
<p>das zauberwort heisst hier: automatisierung</p>
<p>dann existieren solche probleme garnicht erst.</p>
</blockquote>
<p>Genau, automatisch vom Compiler geprüft.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>#define catched caught</p>
</blockquote>
<p>#define catched checked :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651146</guid><dc:creator><![CDATA[kugelecke]]></dc:creator><pubDate>Fri, 23 Jan 2009 20:14:46 GMT</pubDate></item></channel></rss>