Si scopre che il punto di interruzione in questione (2.1) era il punto di interruzione Tutte le eccezioni. Il metodo che stavo chiamando ha sollevato un'eccezione che ha causato il punto di interruzione Tutte le eccezioni. po
interromperà l'esecuzione una volta raggiunto un punto di interruzione (vedere this answer per ulteriori informazioni).
Se si disattiva i tutte le eccezioni breakpoint ed eseguirlo di nuovo, è più chiaro che c'era un'eccezione:
error: Execution was interrupted, reason: signal SIGSTOP.
The process has been returned to the state before execution.
Se si lascia sempre il tutte le eccezioni breakpoint abilitata, il messaggio può essere ambigua: ha raggiunto un punto di interruzione perché c'era davvero un punto di interruzione da qualche parte lungo il percorso di esecuzione o era stata sollevata un'eccezione?
Una soluzione alternativa (che non richiede la disattivazione del punto di interruzione Tutte le eccezioni) utilizza expr
anziché po
(vedere il collegamento sopra per una descrizione dei seguenti flag).
Esecuzione expr -u 0 -o -- foo()
produce il seguente output:
error: Execution was interrupted, reason: breakpoint 2.1 -2.1.
The process has been left at the point where it was interrupted.
* thread #1: tid = [...] libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 2.1 -2.1
frame #0: [...] libobjc.A.dylib`objc_exception_throw
La stringa objc_exception_throw
è un suggerimento che un exception was raised.