[Objective-C++]Exception Handling

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Objective-C++]Exception Handling

    Schönen Guten tag,

    Mein erster Post hier und ich geh mal direkt aufs Ganze:
    Ich würde gerne meine gesamte App mit einem "Exception-Management-System" überwachen. Ich möchte jegliche Art von Exception, Signal usw. abfangen!

    Folgendes habe ich bereits versucht:
    - gist.github.com/2980225/
    - cocoawithlove.com/2010/05/hand…ndled-exceptions-and.html

    Der erste Link hat leider überhaupt nichts gebracht, nachdem ich ihn an die heutige Syntax angepasst hatte.
    Der zweite hilft, allerdings lässt sich wie der Autor erwähnt immer nur eine Exception/Signal abfangen.

    Meine Frage ist nun, hat hie jemand Codebeispiele, Tutorials etc. in welchem etwas solches realisiert wird ? Theoretisch funktioniert der Code von CocoaWithLove wunderbar, allerdings wie gesagt nur einmal... wie lässt sich das ändern ?

    Mit freundlichen Grüßen
    Daniel

    PS: Das Projekt besteht aus reinen Objektive-C, Objektive-C++ und reinen C++ quellen. alle sollen vom Exception-System überwacht&kontrolliert werden.
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DBocksteger ()

  • DanielBocksteger95 schrieb:

    Das ist agr nicht so einfach wenn man mit Netzwerk und Konsorten interagiert ;)

    Außerdem haben wir auf einige Teile des Projektes keinen richtigen Einfluss. Schade das niemand auf meine eigentliche Frage, welche sich auf die links bezieht, eingeht.


    doch, EXC_BAD_ACCESS lässt sich meist verhindern (vor allem im eigenen code).

    ansonsten den fremdcode eben in ein tool auslagern.

    wie man signale abfängt wird einem ja in jedem c-tutorial erkärt. ansonsten "man signal".
  • Es lässt sich nicht ohne Weiteres alles einfach abfangen. Ich stehe auch gerade vor so einem Problem, habe es allerdings nicht länger als 15 Minuten probiert (geringe Priorität). Div0 wollte er bei mir partout nicht fangen. Aber mutmaßlich befindet sich ein Fehler im Code.

    Wenn du also etwas Anständiges findest, wäre es nett, wenn du das hier berichtest.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • In der Regel kann man nichts sinnvolles nach einem EXC_BAD_ACCESS mehr machen, als die Anwendung ordentlich herunterzufahren - Du hat danach keinerlei Garantie mehr, was Dein Programm dannach macht.
    Du kannst Dir Googles Breakpad anschauen, damit fängt man soetwas ab und fährt dann die Anwendung ordentlich herunter (mit Crash-Report).

    Das ganze läuft über Mach-Exceptions, wo Du so ziemlich alle Informationen bekommst. Die Dokumentation ist nicht so berauschend; beste Quelle ist meines Erachtens der Quellcode von Google Breakpad, sowie der gdb und llvdb Quellcode.

    Ich hatte tatsächlich (weil Amin es grad erwähnt hatte), eine minimal-Anwendung gebaut, die eine Div-by-zero oder ein nullpointer-access korrekt abfängt und weiterarbeitet; hab aber alles davon verloren und ist ewig her, und ergibt wie gesagt so gut wie nie einen Sinn.

    PS (obligatorischer Troll-Zusatz): Unter Windows geht das alles echt super-schön :P
    C++
  • HM lernen wie man Exceptions abfängt statt lernen keine zu erzeugen.

    Ist ja irgendwie wie einen Kurs zur Widerbelebung zu machen statt schwimmen zu lernen. Nutzt trotzdem nichts wenn du untergehst.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • zerm schrieb:

    In der Regel kann man nichts sinnvolles nach einem EXC_BAD_ACCESS mehr machen, als die Anwendung ordentlich herunterzufahren - Du hat danach keinerlei Garantie mehr, was Dein Programm dannach macht.
    Du kannst Dir Googles Breakpad anschauen, damit fängt man soetwas ab und fährt dann die Anwendung ordentlich herunter (mit Crash-Report).

    Das ganze läuft über Mach-Exceptions, wo Du so ziemlich alle Informationen bekommst. Die Dokumentation ist nicht so berauschend; beste Quelle ist meines Erachtens der Quellcode von Google Breakpad, sowie der gdb und llvdb Quellcode.

    Ich hatte tatsächlich (weil Amin es grad erwähnt hatte), eine minimal-Anwendung gebaut, die eine Div-by-zero oder ein nullpointer-access korrekt abfängt und weiterarbeitet; hab aber alles davon verloren und ist ewig her, und ergibt wie gesagt so gut wie nie einen Sinn.

    PS (obligatorischer Troll-Zusatz): Unter Windows geht das alles echt super-schön :P

    Man kann nach in Objective-C eigentlich nach jeder Exception die Anwendung herunterfahren. Exceptions haben nämlich hier die Semantik: "Fehler des Programmierers", nicht "Fehler im Programmlauf" oder "Try and error". (Dazu dient NSError.) Insofern geht das in Objective-C auch sehr schön: NIchts tun.

    Allerdings kenne ich Leute, die wirklich in Objective-C mit Exceptions herumhantieren. Dem Code sah man das auch ansonsten an.

    Ich gehe auch davon aus, dass man den Div0 sauber bekommt. Wie gesagt, ich habe es nicht weiter probiert. Eigentlich ging es mir darum, eine Exception zu fangen, um jemanden zu sagen, dass er Scheiße auf meinem Server liegen hat. Und um den Mechanismus zu überprüfen, brauchte ich natürlich Code, der eine Exception wirft. Also habe ich Vollidiot eine Div0 programmiert, bis ich bemerkte, dass das natürlich keine Exception wirft. (Wie auch aus C-Code?) Da dachte ich mir: Gut, bauste auch gleich Signalhandler ein. GIng aber eben nicht sofort und da habe ich gleich eine Exception geworfen, um zu testen. Steht noch auf meiner Todoliste.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin, ich glaube der TE sowie auch ich, sehen den begriff 'Exception' weiter als die konstrukte in verschiedenen Sprachen. Auf diese bezogen hast du natürlich recht. Jedoch ist, AFAIK, ein bad access oder divbyzero eben auch eine mach-exception (die man über die normalen sprachkonstrukte nicht fangen kann). Unter C++ auf Windows gibt es bspw auch ein try/catch wie gewohnt, sowie auch ein __try, mit dem man so ziemlich alles andere fangen kann (wie etwa ein bad-access).
    C++
  • Es geht weiter !!!

    Denkst du es gäbe einen Weg auf Exceptions im Sinne von Signalen abzufangen ?

    So langsam werden die Abstürze allerdings weniger.... wer suchet, der findet.... Allerdings sind leider noch Sachen dabei, bei denen ich echt keinen Rat weiß... :(

    Siehe: irrlicht.sourceforge.net/forum…&t=47985&p=276450#p276450

    Vllt. jemand aus der C++ ecke oder so eine Idee ?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Ich erinnere mich ganz ganz gaaaaanz dunkel an ein Objective-C++ Projekt, dass mir mal vorgesetzt wurde.

    Testest du es nur auf iOS 6.0?
    Unter iOS 6.0 hatte ich permanent irgendwelche nicht behebbaren EXC_BAD_ACCESS Abstürze, unter iOS 5.1 hingegen lief der Code sauber durch.
    Teste das doch mal unter iOS 5.1, wenn noch nicht geschehen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Ach, vergessen den Troll zu füttern:

    zerm schrieb:

    PS (obligatorischer Troll-Zusatz): Unter Windows geht das alles echt super-schön :P

    Wirklich? Kann ich mir nicht vorstellen, ich bekomme da irgendwie keine vernünftige Objective-C++ IDE installiert. +seufz+
    Wie geht das?

    (super-schön in Verbindung mit C++ kannst du ja gar nicht meinen. ^^)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Teste das Programm mal im Simulator.
    iOS 6.0 (sollte dieselben Fehler bringen) und iOS 5.1

    Wenn Letzteres läuft, dann... weiß ich auch nicht, wie sich das beheben ließe.
    Auf jeden Fall ist es dann einen BugReport wert. Entweder an Irrlicht oder an Apple.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P