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).
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 ...
... 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 ...
... 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 ...
... 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 ...
... ed è necessario selezionare precedente stack frame per vedere dove è stato gettato l'errore .. .
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
lldbinit non funziona. Come lo usi? –
@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