2013-06-19 9 views
7

Ho impostato un punto di interruzione con la condizione ...Errore in condizione di breakpoint

[event.name isEqualToString:@"Some Name"] 

Questo funziona bene.

Tuttavia, quando provo ad aggiungere un altro punto di interruzione con la condizione ...

[part.name isEqualToString:@"Some Value With A Pound Sign £"] 

ottengo l'errore ...

Internal error [IRForTarget]: An Objective-C constant string's string initializer is not an array 
Stopped due to an error evaluating condition of breakpoint 

ho bisogno di sfuggire al cancelletto o qualcosa ?

+0

Non crea un errore se rimuovo il £ ... ma non si ferma. – Fogmeister

+0

try '[part.name rangeOfString: @" Some Value With A Pound Sign "]. Location! = NSNotFound;' A meno che non si stia cercando specificamente il segno di cancelletto, sarà necessario esaminare le stringhe utilizzando una codifica diversa. – Putz1103

+1

Sembra un bug in LLDB (problema di codifica) e dovresti segnalarlo ad Apple. –

risposta

11

C'è un bug con il parser di espressioni e un letterale NSString contenente caratteri non ASCII.

(lldb) po @"u" 
$9 = 0x00007fff7debe5e0 u 
(lldb) po @"ü" 
Internal error [IRForTarget]: An Objective-C constant string's string initializer is not an array 
error: warning: expression result unused 
error: The expression could not be prepared to run in the target 

C'è già un bug segnalato con http://bugreport.apple.com/ su questo problema.

I valori letterali di stringa C non ASCII vengono gestiti correttamente, pertanto è possibile ovviare a questo problema, ad es.

(lldb) po [NSString stringWithUTF8String:"ü"] 
$11 = 0x000000010010b040 ü 
1

Non so il motivo per cui i punti di interruzione hanno ancora un tale sostegno compilatore limitate, ma in ogni caso, di risolvere il problema, dovrebbe essere sufficiente per lanciare il tipo di ritorno di ciascun metodo si chiama in questo modo:

(BOOL)[(NSString *)[part name] isEqualToString:@"some string"] 

Con questo codice il codice dovrebbe fermarsi se la stringa non contiene il simbolo "£" o qualsiasi altro carattere non ASCII. Come sembra che il compilatore LLDB abbia problemi con caratteri non ASCII, potresti voler convertire prima le stringhe usando quella codifica. Nel frattempo, mentre sto cercando un modo per evitare questo se possibile ...

+0

Il problema si verifica se "una stringa" contiene caratteri non ASCII. La trasmissione a 'NSString *' non ha aiutato nel mio caso di test. –

+0

No, non è stato d'aiuto neanche per me. Scusate. – Fogmeister

+0

Oh sì, ho notato.Bene, almeno il suo codice dovrebbe fermarsi quando non c'è un carattere non ASCII. Proviamo a trovare una soluzione per questo! –