2012-09-25 16 views
7

Il codice non dovrebbe avere alcun effetto Dovrebbe essere fattibile ovunque Non genera compilatore avvertimentoc'è qualche alcuna operazione op in Objective-C che possiamo usare solo per impostare breakpoint

Fondamentalmente a volte mi voglio fare NSAssert. Tuttavia, piuttosto che NSAssert, a volte voglio fare il mio se stesso. In questo modo posso semplicemente impostare o disinserire il punto di interruzione

Attualmente questo è quello che faccio.

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

È solo che ho una variabile denominata errore che non userò più. Ma quale sarebbe una buona alternativa

Ho anche provato [nil donining]; ma questo ha avuto l'errore del compilatore.

risposta

7

Prova questo:

while (false); 

Ci sono altre possibilità, come if (false) o anche solo una riga con un solo punto e virgola ;, ma in questi casi l'esecuzione si interrompe all'istruzione successiva, probabilmente perché il compilatore semplicemente elimina quei bit di codice vuoti. L'utilizzo di while ha il vantaggio che l'esecuzione si fermerà su quella linea (presumendo che tu abbia inserito un punto di interruzione lì, ovviamente).

+0

tutti sono una grande risposta. Questo è il migliore –

+0

'if (false)' e ';' funziona bene se non usiamo ottimizzazioni? –

+1

@ BenC.R.Leggiero Non posso dirlo con certezza, ma non ci vorrà molto per provarlo. – Caleb

2

non confrontare 2 stringhe direttamente; provare [NSString isEqualToString:]

3

È possibile fornire le condizioni di punti di interruzione, tenere premuto l'opzione e il comando e fare clic sul punto di interruzione, è necessario ottenere un pop-up. Nel campo 'condizione' yo può inserire qualcosa come

[entityName isEqualToString:@"Business"] 

(Si noti che si dovrebbe confrontare le stringhe con -isEqualToString: non ==, in quanto quest'ultimo mette a confronto i puntatori non i caratteri nelle stringhe stesse.)

By utilizzando la condizione nel punto di interruzione non è necessario l'istruzione if, e abilitare e disabilitare il controllo senza la ricompilazione. C'è molto di più si può fare con le impostazioni di punto di interruzione, come lo hanno tempo per automatizzare un messaggio o eseguire un comando del debugger ecc

+0

Voglio cose che posso vedere chiaramente nel codice. –

+0

Personalmente trovo che avere un sacco di condizioni di debug nel mio codice sia doloroso, dato che perdi rapidamente traccia di dove sono comunque e poi devi darle la caccia per la produzione, o semplicemente rintracciare un altro bug.Mettendo tutti i passaggi di debug come rottura, registrazione, avviso di stato di codice errato ecc. Trovo molto più conveniente essere nei punti di interruzione xcode. Quindi posso accedere a un elenco di essi, accenderli e spegnerli facilmente e non si impegnano al controllo del codice sorgente se non esplicitamente fatto. Ma ognuno ha il suo modo di codificare e dovresti assolutamente usare quello che ritieni che funzioni meglio per te. –

+0

In realtà anche quello che fai ha senso. Basta ripetere la condizione. Hmm ... Controllo del codice sorgente. Devo imparare a usarlo. –

0

è possibile utilizzare __asm int 3;

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

Da CFInternal.h.

#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

Che cosa fa __asm ​​int 3? no op? Se si ferma solo io lo voglio fatto dal punto di rottura. –

+1

Chiamerà l'interruzione del punto di interruzione. –

3

In C, si può avere un'istruzione no-op semplicemente mettendo un punto e virgola da solo in una riga:

if (TRUE) { 
    ; // Neutral operation 
} 

In Objective-C si potrebbe fare lo stesso, la cosa è vostri arresti di programma prima della riga successiva, come potete vedere qui:

enter image description here

+0

Consiglio eccellente. Voglio inserire una riga simile con il commento per rendere il codice auto-documentante che "Nessun codice è necessario a questo punto". –