2015-07-23 14 views
12

Esiste un modo per specificare che un punto di interruzione deve essere interrotto su tutte le istruzioni di "lancio"? (Punto di interruzione simbolica)Come impostare un punto di interruzione su tutti i tiri?

guard let id = UInt(idString), 
     let changeset = UInt(changesetString), 
     let uid = UInt(uidString) 
else { 
     throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil) 
} 

risposta

3

Appena trovato un'alternativa in Xcode 8.3: c'è un opzione "Swift breakpoint errore" nel menu per l'aggiunta di nuovi punti di interruzione ad-hoc:

swift error breakpoint

Se si fa clic il punto di interruzione appena creata, si può anche specificare un particolare tipo di Error -conformi di rompere su.

custom type

21

La prima cosa da tenere a mente è che gli errori gettati a Swift non sono eccezioni, solo errori (NSError, qualunque sia basati su ErrorType, ...).

La seconda cosa è, non utilizzare try! a meno che non sia dannatamente sicuro che non si verificherà un arresto anomalo o se l'arresto anomalo è ciò che si desidera realmente.

Non combinare symbolic breakpoint con exception breakpoint. Animali diversi.

Torna alla tua domanda ...

throw non è un simbolo, quindi punto di interruzione simbolica non funziona per voi. Ma c'è un modo ...

(lldb)br s -E swift 

-E <language> (--language-exception <language>) 
    Set the breakpoint on exceptions thrown by the specified language 
    (without options, on throw but not catch.) 

... questo è po 'fuorviante, perché errori generati non sono eccezioni. Tienilo a mente. Quando provi a impostare il punto di interruzione delle eccezioni in Xcode, non c'è Swift. Probabilmente il motivo principale è che gli errori lanciati non sono eccezioni e non hanno capito dove metterlo ancora (chi lo sa).

Exception breakpoint - Edit

inserirlo manualmente

Impostare un punto di interruzione da qualche parte nel codice, quando va in pausa, basta digitare br s -E swift in LLDB pronta e poi continuare.

Aggiungi automaticamente

Impostare un punto di interruzione da qualche parte nel codice in questo modo ...

Breakpoint br s -E swift

... e attivarla (ON/OFF) quando si vuole fermarsi su throw.

simbolico punto di interruzione

Quando utilizzati già accennato br s -E swift che si sta per scoprire che non c'è simbolo per throw. In realtà non è throw, ma swift_willThrow. Sentitevi liberi di impostare breakpoint simbolica in questo modo ...

swift_willThrow symbolic breakpoint

... Non consiglio in questo modo, per ora, perché può essere modificato in futuro. Ma se è abbastanza per ora, perché no.

Puoi condividere il tuo punto di interruzione tra i progetti Xcode come questo ...

enter image description here

... clic secondario, Sposta punto di interruzione per, utente.Il punto di interruzione sarà visibile in tutti i progetti Xcode.

Quando si ha colpito punto di interruzione, vi ritroverete in qualcosa di simile ...

Breakpoint hit on swift_willThrow

... ed è necessario selezionare precedente stack frame per vedere dove è stato gettato l'errore .. .

Throw stack frame

+0

Proprio _Che di nuovo in sessione LLDB_ per ottenere _br s -E swift_. Tutto il resto è l'uso comune dei punti di interruzione. Leggi le guide LLDB o Xcode. Niente di speciale. – robertvojta

+0

lldbinit non funziona. Come lo usi? –

+0

@VyachaslavGerchicov hai ragione. Funzionava, ma ora non funziona. Ad ogni modo, l'ho rimosso dalla mia risposta e ho aggiunto un esempio su come condividere il breakpoint su tutti i progetti Xcode (basati su utenti). Non c'è bisogno di usare '~/.lldbinit'. – robertvojta

Problemi correlati