2012-09-25 7 views
7

Der Code sollte nicht keine Wirkung verwenden kann, sollte es machbar sein, überall Es spielt keine Compiler-WarnungGibt es irgendeine kein Op Betrieb in Objective-C, die wir gerade Breakpoint setzen

I Grundsätzlich manchmal erzeugen möchte NSAsssert machen. Aber statt NSAssert möchte ich manchmal mein if {} meins machen. Auf diese Weise kann ich nur leicht scharf oder unscharf geschaltet der Unterbrechungspunkt

Derzeit ist es das, was ich tue.

if ([email protected]"Business") 
{ 
    error=nil; //Some code for breakpoint. I want something that do nothing actually. 
} 

Es ist nur passiert, dass ich eine Variable namens Fehler habe, die ich nicht mehr verwenden werde. Aber was für ein goodalternative

würde ich auch versucht, [nil DoNothing]; aber das hat Compilerfehler bekommen.

Antwort

7

starten:

while (false); 

Es gibt andere Möglichkeiten, wie if (false) oder auch nur eine Zeile mit einem einzelnen Semikolon ;, aber in diesen Fällen stoppt die Ausführung bei der nächsten Anweisung, möglicherweise weil der Compiler einfach diese leeren Bits des Codes beseitigt. Mit while hat den Vorteil, dass die Ausführung auf dieser Linie zu stoppen (vorausgesetzt, Sie einen Haltepunkt setzen dort, natürlich).

+0

alle sind eine gute Antwort. Dieser ist der Beste. –

+0

werden 'if (false)' und ';' gut funktionieren, wenn wir keine Optimierungen verwenden? –

+1

@ BenC.R.Leggiero Ich kann nicht sicher sagen, aber es würde nicht lange dauern, es zu versuchen. – Caleb

2

Sie nicht vergleichen 2 Strings direkt; versuchen [NSString isEqualToString:]

3

Sie können Haltepunkte Bedingungen geben, halten Sie Option und Befehl nach unten und den Haltepunkt klicken, sollten Sie ein Pop-up bekommen. In der ‚Zustand‘ Feld kann yo so etwas wie

[entityName isEqualToString:@"Business"] 

(Beachten Sie, dass Sie Strings mit -isEqualToString: nicht == vergleichen sollte, da diese die Zeiger nicht die Zeichen in den Saiten vergleicht sich.) Eingeben

von Wenn Sie die Bedingung im Haltepunkt verwenden, sollten Sie die if-Anweisung überhaupt nicht benötigen und auch die Prüfung ohne Neukompilierung aktivieren und deaktivieren. Es gibt viel mehr können Sie mit den Breakpoint-Einstellungen zu tun, wie haben es automatisch eine Meldung protokollieren oder einen Debugger-Befehl ausführen usw.

+0

Ich mag Dinge, die ich klar im Code sehen kann. –

+0

Ich finde es sehr problematisch, viele Debug-Bedingungen in meinem Code zu haben, da man schnell den Überblick verliert, wo sie alle sind und sie dann für die Produktion aufspüren oder einfach einen anderen Bug aufspüren müssen.Putting alle Debug-Schritte wie brechen, Protokollierung, Alarmierung falschen Code-Status usw. Ich finde viel bequemer in xcode Breakpoints zu sein. Dann kann ich auf eine Liste von ihnen zugreifen, sie einfach ein- und ausschalten und sie werden nicht an die Quellcodeverwaltung gebunden, es sei denn, es wird explizit darauf hingewiesen. Aber jeder hat seine eigene Art zu programmieren und Sie sollten auf jeden Fall das verwenden, was Ihnen am besten gefällt. –

+0

Eigentlich macht das auch Sinn. Wiederholen Sie einfach die Bedingung. Hmm ... Quellcodeverwaltung. Ich muss lernen, es zu benutzen. –

0

Sie __asm int 3;

if ([entityName isEqualToString:@"Business"]) { 
    __asm int 3; 
} 

Von CFInternal.h verwenden können.

#if defined(__ppc__) || defined(__ppc64__) 
#define HALT asm __volatile__("trap") 
#elif defined(__i386__) || defined(__x86_64__) 
#if defined(__GNUC__) 
#define HALT asm __volatile__("int3") 
#elif defined(_MSC_VER) 
#define HALT __asm int 3; 
#else 
#error Compiler not supported 
#endif 
#endif 
if ([entityName isEqualToString:@"Business"]) { 
    HALT; 
} 
+0

Was macht __asm ​​int 3? keine op? Wenn es nur stockend ist, will ich es bis zum Bruch haben. –

+1

Es wird Breakpoint Interrupt aufrufen. –

3

In C, können Sie haben einen no-op-Befehl einfach ein Semikolon allein in einer Zeile setzen:

if (TRUE) { 
    ; // Neutral operation 
} 

In Objective-C Sie das gleiche tun könnten, ist das, was Ihr Programm stoppt bevor die nächste Zeile kann, wie Sie hier sehen:

enter image description here

+0

Ausgezeichneter Tipp. Ich möchte eine solche Zeile mit einem Kommentar einfügen, damit der Code selbst dokumentiert, dass an dieser Stelle kein Code benötigt wird. –