swift - ver - ventajas de los puntos de interrupcion
¿Cómo establecer un punto de interrupción en todos los lanzamientos? (2)
Lo primero a tener en cuenta es que los errores arrojados en Swift no son excepciones, solo errores ( NSError
, cualquiera que esté basado en ErrorType
, ...).
Lo segundo es que no uses try!
a menos que estés seguro de que no se bloqueará o si el bloqueo es lo que realmente quieres.
No mezcle un punto de corte simbólico con un punto de corte de excepción . Diferentes bestias.
De vuelta a tu pregunta ...
throw
no es un símbolo, por lo tanto, el punto de corte simbólico no funciona para usted. Pero hay una manera ...
(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.)
... esto es un poco engañoso, porque los errores arrojados no son excepciones. Mantén esto en mente. Cuando intenta establecer un punto de corte de excepción en Xcode, no hay Swift. Probablemente la razón principal es que los errores arrojados no son excepciones y aún no han descubierto dónde ponerlo (quién sabe).
Agregarlo manualmente
Establezca un punto de interrupción en algún lugar de su código, cuando la ejecución se detenga, simplemente escriba br s -E swift
en el prompt LLDB y luego continúe.
Agregarlo automáticamente
Establezca un punto de interrupción en algún lugar de su código de esta manera ...
... y alternar (activar / desactivar) cuando quieras detener el throw
.
Punto de ruptura simbólico
Cuando utilizas la br s -E swift
ya mencionada, encontrarás que hay un símbolo para throw
. En realidad no es throw
, pero swift_willThrow
. Siéntase libre de establecer un punto de inflexión simbólico de esta manera ...
... No lo recomiendo de esta manera por ahora, porque se puede cambiar en el futuro. Pero si es suficiente por ahora, ¿por qué no?
Puede compartir su punto de interrupción en proyectos de Xcode como este ...
... clic secundario, Mover punto de inflexión a , Usuario . Breakpoint estará visible en todos los proyectos de Xcode.
Cuando llegue al punto de ruptura, terminará en algo como esto ...
... y debe seleccionar el marco de pila anterior para ver dónde se lanzó el error ...
¿Hay alguna manera de cómo podemos especificar un punto de interrupción para detenerse en todas las declaraciones de "lanzamiento"? (punto de inflexión simbólico)
guard let id = UInt(idString),
let changeset = UInt(changesetString),
let uid = UInt(uidString)
else {
throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}