Wie kann NSAsert die Beschreibung in Xcode4 protokollieren?

8

Xcode 4 sagt mir, wenn ein NSAsssert fehlgeschlagen ist, aber die Assert-Beschreibung und Backtrace werden nicht mehr protokolliert. Ich habe diese Frage gesehen:

Wie kann Xcode4 bei NSAsssert-Ausfall stoppen?

was hilfreich ist, aber ich würde lieber die Behauptung protokollieren und fortfahren. Wie kann ich NSAssert so verhalten? Danke!

    
Lou Zell 07.12.2011, 06:28
quelle

2 Antworten

5

Die Frage, die du verlinkt hast, bringt dich am meisten dorthin. Fügen Sie dem Haltepunkt, den Sie für die Assertion festlegen, eine Haltepunktaktion hinzu. Wählen Sie den Haltepunkt im Haltepunktnavigator aus, klicken Sie mit der rechten Maustaste, und wählen Sie Haltepunkt bearbeiten. Wenn Sie Haltepunkt bearbeiten wählen, wird ein Popup-Editor geöffnet. Im Popup-Editor sollte eine Aktionszeile mit dem Text angezeigt werden. Klicken Sie hier, um eine Aktion hinzuzufügen. Klicken Sie auf diesen Text, um ein Menü zu öffnen. Wählen Sie im Menü Aktion die Option Protokollnachricht. Aktivieren Sie das Kontrollkästchen Automatisch nach Auswertung der Aktionen fortsetzen, um nach dem Protokollieren der Nachricht automatisch fortzufahren.

    
Mark Szymczyk 07.12.2011, 20:34
quelle
1

Wenn Sie sich anmelden und fortfahren müssen, müssen Sie NSAsssert nicht verwenden.

Im Allgemeinen sollen Assertionen von Entwicklern in Debug-Builds verwendet werden, um die Ausführung der Anwendung sofort zu stoppen, wenn ein schwerwiegender Fehler entdeckt wurde. Standardmäßig setzen Xcode-Projekte NS_BLOCK_ASSERTIONS in Release-Builds so, dass NSAsssert-Aufrufe kompiliert werden.

Bei kleineren Problemen, die nur auf der Konsole protokolliert werden müssen, sollten Sie nur NSLog verwenden. (Die Debugger-Konsole zeigt tatsächlich die Daten an, die an 'stdout' gesendet wurden. Hier sendet NSLog seine Ergebnisse.)

Wenn Sie Debug-Versionen zum Bestätigen und Freigeben von Builds zum Protokollieren benötigen, verwenden Sie beide. Ja, das bedeutet, dass Sie die gleiche Beschreibung zweimal im Code haben, aber das ist in Ordnung. Es wird von jedem Entwickler leicht verstanden. (Sie können die Ergebniszeichenfolge zuerst erstellen, wenn Sie möchten, können Sie sie sowohl NSAsssert als auch NSLog hinzufügen.)

Wenn Sie das Verhalten eines NSAssert-Aufrufs überschreiben müssen, haben Sie zwei Möglichkeiten: 1- Ändern Sie die Makrodefinition von NSAssert, NSAssert1, NSAssert2 usw., um das Ergebnis zu ändern. 2- Liefern Sie Ihr eigenes NSAssertionHandler-Objekt an Ihre Threads und lassen Sie es überspringen, indem es die Ausnahmen auslöst.

    
Walt Sellers 14.02.2013 07:05
quelle

Tags und Links