Breakpoint — qué es, variedades de puntos de interrupción y uso en depuración

Autor: IT Sectr Publicado: 2026-05-06 Tiempo de lectura: 9 min

Un punto de interrupción (breakpoint) es un marcador especial en el código en el que el depurador pausa la ejecución del programa para inspeccionar el estado. Según la Apple Debugging Guide, los breakpoints permiten al desarrollador ver los valores de las variables, la pila de llamadas y realizar la ejecución paso a paso sin modificar el código fuente. Es la herramienta principal para diagnosticar errores y analizar el comportamiento de la aplicación en tiempo real.

Puntos Clave

  • Breakpoint — un marcador en el código fuente que detiene la ejecución del programa en un punto determinado para analizar el estado.
  • Tipos de puntos de interrupción incluyen lineales, condicionales, simbólicos y de excepción — cada uno con su ámbito de aplicación.
  • LLDB — el depurador de Xcode que gestiona los breakpoints a través de la interfaz gráfica y comandos de consola.
  • Los breakpoints condicionales se activan solo cuando se cumple una expresión lógica especificada, ahorrando tiempo al depurar bucles.
  • El rendimiento de la aplicación no se ve afectado si los breakpoints están inactivos — se compilan condicionalmente.

Qué es un Breakpoint y para qué sirve

Un breakpoint es un marcador activo que se coloca en una línea específica del código fuente, al alcanzarla el depurador pausa forzosamente la ejecución del hilo. En ese momento, el desarrollador obtiene control total sobre el estado de la aplicación: puede ver los valores de todas las variables en el ámbito actual, examinar la pila de llamadas, ejecutar expresiones arbitrarias y continuar la ejecución paso a paso. Sin los breakpoints, la depuración se reduciría a añadir infinitas expresiones print temporales y luego eliminarlas — un enfoque que ensucia el código y no ofrece control interactivo.

El objetivo principal de un breakpoint es localizar el origen de un error. Cuando una aplicación se comporta de forma inesperada, el desarrollador coloca un punto de interrupción antes de la sección sospechosa y analiza secuencialmente qué datos entran, cómo cambian las variables y qué camino sigue la ejecución. Según Apple, más del 70% de los errores en aplicaciones móviles se detectan precisamente con breakpoints combinados con ejecución paso a paso, en lugar de mediante análisis estático de código.

Los breakpoints no afectan al rendimiento de la compilación de lanzamiento — solo se compilan en la configuración Debug. Xcode tiene un flag especial DEBUG que envuelve el código de depuración con directivas de preprocesador. Esto garantiza que los breakpoints no lleguen a la App Store ni ralenticen a los usuarios finales.

Cómo funciona el mecanismo de parada

Cuando el procesador alcanza una línea marcada con un breakpoint, se produce una interrupción de hardware o software. En Xcode se utiliza el mecanismo SIGTRAP — una señal de trazado interceptada por el depurador. LLDB suspende todos los hilos, pasa el control a la interfaz de Xcode y espera el comando del desarrollador: continuar (continue), saltar (step over), entrar (step into) o salir (step out).

swift
func fetchUserData(userId: Int) {
    // LLDB will stop here if breakpoint is set
    let url = URL(string: "https://api.example.com/user/\(userId)")
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    print("Fetching user \(userId)")
}

En el ejemplo anterior, el breakpoint establecido en la línea let url = ... permite comprobar qué userId se pasó a la función, si la URL se ensambló correctamente y qué cabeceras están configuradas en la solicitud antes de que se ejecute la llamada de red.

Tipos de Puntos de Interrupción en Xcode

Xcode proporciona cinco tipos principales de breakpoints, cada uno resolviendo una tarea específica de depuración. Comprender sus diferencias permite elegir la herramienta óptima para cada situación y reducir el tiempo de diagnóstico en 2–3 veces en comparación con el uso exclusivo de puntos de interrupción lineales.

Tipo de BreakpointPropósitoActivación
Line breakpointDetención en una línea específica de códigoClic en el número de línea en el editor
Conditional breakpointDetención al cumplirse una condiciónClic derecho → Edit Breakpoint → Condition
Symbolic breakpointDetención al llamar a una función/métodoBreakpoint Navigator → + → Symbolic Breakpoint
Exception breakpointDetención al lanzarse una excepciónBreakpoint Navigator → + → Exception Breakpoint
Error breakpointDetención al ocurrir un error (Swift)Breakpoint Navigator → + → Swift Error Breakpoint

Line Breakpoint — Tipo Básico

El Line breakpoint es el tipo más común. Se establece con un solo clic en el número de línea del editor de Xcode. Cuando se alcanza esa línea, la ejecución se pausa y el desarrollador puede inspeccionar el estado a través del panel Debug Area o la consola de LLDB. Según las estadísticas de Stack Overflow, más del 85% de los desarrolladores de iOS utilizan breakpoints lineales como herramienta principal de depuración, mientras que los otros tipos se emplean para escenarios específicos como la depuración de bibliotecas de terceros o la captura de excepciones.

Symbolic Breakpoint — Interceptación de Llamadas a Funciones

El Symbolic breakpoint permite detenerse cuando se llama a un método o función específica, incluso si no se tiene acceso al código fuente de ese método. Es indispensable al depurar frameworks del sistema — por ejemplo, para interceptar el momento en que UIKit llama a layoutSubviews. La configuración incluye el nombre del símbolo (ej. -[UIView layoutSubviews] para Objective-C o UIView.layoutSubviews() para Swift) y parámetros opcionales: módulo, condición y número de omisiones.

swift
// Symbolic breakpoint to intercept layoutSubviews on UITableView
// Symbol name: -[UITableView layoutSubviews]
// Action: po UITableView.appearance()

class CustomTableView: UITableView {
    override func layoutSubviews() {
        super.layoutSubviews()
        // Symbolic breakpoint here will intercept the call
        print("layoutSubviews called")
    }
}

Breakpoints Condicionales y Configuración de Acciones

Un breakpoint condicional no se activa en cada ejecución de la línea, sino solo cuando una expresión lógica especificada se evalúa como true. Esto supone un enorme ahorro de tiempo al depurar bucles, procesamiento de arrays y llamadas recursivas — en lugar de pulsar Continue manualmente cada vez, el desarrollador establece una condición y el depurador se detiene solo en el momento relevante.

Configuración de la Condición de Parada

Para añadir una condición, haga clic derecho en el breakpoint, seleccione Edit Breakpoint e introduzca una expresión en Swift u Objective-C en el campo Condition. Se permiten comparaciones, operadores lógicos y llamadas a métodos sin efectos secundarios. Xcode evalúa la expresión en el contexto del programa detenido y, si es verdadera, el depurador captura el estado.

swift
for index in 0..<1000 {
    // Breakpoint with condition: index == 500
    // The debugger will stop only on the 501st iteration
    processItem(at: index)
}

Acciones al Activarse

Además de una condición, un breakpoint puede realizar acciones automáticas sin detener el programa. Esto se implementa mediante la opción Automatically continue after evaluating en la configuración del breakpoint. Las acciones incluyen: mostrar valores en la consola (po variable), reproducir una señal sonora, ejecutar un comando LLDB arbitrario o lanzar un script de shell. Este enfoque reemplaza las expresiones print temporales y permite registrar datos sin modificar el código fuente.

swift
// Breakpoint with action: po “Index: \(index), value: \(items[index])”
// Automatically continue = true → program does not stop

func processItems(_ items: [String]) {
    for (index, item) in items.enumerated() {
        // Here the breakpoint logs every iteration without stopping
        print("Processing \(item)")
    }
}

Esta técnica es especialmente útil al depurar actualizaciones de UI — por ejemplo, para registrar todos los cambios de marco sin interferir en el código del controlador. Según Ray Wenderlich, el uso de acciones de breakpoint en lugar de expresiones print temporales reduce el tiempo de depuración en un 30–40% al no necesitar limpiar el código después.

Gestión de Breakpoints a través de LLDB

Aunque Xcode proporciona una interfaz gráfica cómoda, LLDB admite decenas de comandos para la gestión programática de puntos de interrupción directamente desde la consola del depurador. Esto ofrece capacidades no disponibles a través de la GUI: desactivación masiva de breakpoints por expresión regular, establecimiento de puntos de interrupción en bibliotecas cargadas dinámicamente y creación de disparadores complejos de varios pasos.

Comandos LLDB Esenciales para Breakpoints

Comando LLDBDescripciónEjemplo
breakpoint setEstablecer un breakpointbreakpoint set -f ViewController.swift -l 42
breakpoint listMostrar todos los breakpointsbreakpoint list
breakpoint disableDesactivar un breakpoint por númerobreakpoint disable 1
breakpoint deleteEliminar un breakpointbreakpoint delete 1.2
breakpoint modifyModificar condición o acciónbreakpoint modify -c “i > 100” 1
lldb
(lldb) breakpoint set -f LoginViewController.swift -l 15 -c "email.isEmpty"
Breakpoint 1: 15 locations added.
(lldb) breakpoint modify 1 -C "po email" -G true
(lldb) breakpoint list
1: name = 'LoginViewController.swift:15', condition = 'email.isEmpty'
    1.1: addr = 0x1000a3b40

Expresiones Regulares en breakpoint set

LLDB admite el establecimiento de breakpoints por expresión regular para nombres de funciones. Esto permite interceptar todos los métodos que coincidan con un patrón — por ejemplo, todos los métodos que comiencen con handle en una clase específica. Este enfoque se utiliza durante la refactorización y el análisis de código desconocido cuando se necesita entender qué métodos participan en el procesamiento de un evento determinado.

lldb
(lldb) breakpoint set -r "handle[A-Z]" -s DataManager
Breakpoint 2: 6 locations.
(lldb) breakpoint set -r ".*Error.*"
Breakpoint 3: 23 locations.

Breakpoints Simbólicos y de Excepción

Un Exception breakpoint detiene la ejecución del programa cuando se lanza cualquier excepción — tanto de Objective-C como errores de Swift. En Xcode se puede configurar la interceptación solo de excepciones Objective-C, solo errores Swift o todos los tipos. Es una herramienta indispensable cuando la aplicación falla sin una indicación clara de la ubicación en el código — por ejemplo, al acceder a un objeto desasignado.

Swift Error Breakpoint

Swift Error Breakpoint es un tipo especializado introducido en Xcode 11. Intercepta el momento en que una función Swift lanza un error mediante throw, antes de que llegue a un bloque catch. Esto permite ver qué función generó el error y con qué argumentos, lo cual es crítico al depurar cadenas de llamadas complejas con múltiples niveles de manejo de errores.

swift
enum NetworkError: Error {
    case invalidURL
    case noData
    case decodingFailed(String)
}

func loadUserProfile(id: Int) throws -> UserProfile {
    guard id > 0 else {
        throw NetworkError.invalidURL
    }
    // Swift Error Breakpoint will stop here on throw
    return UserProfile(id: id, name: "Test")
}

Los breakpoints simbólicos también son efectivos al depurar KVO y NotificationCenter. Estableciendo un breakpoint en observeValue(forKeyPath:of:change:context:), el desarrollador puede interceptar todas las notificaciones KVO en la aplicación, lo que ayuda a diagnosticar actualizaciones inesperadas de la interfaz o condiciones de carrera relacionadas con la observación de propiedades.

Consejos Prácticos para Trabajar con Puntos de Interrupción

El uso eficaz de los breakpoints va mucho más allá de simplemente detenerse en una línea. Los desarrolladores experimentados combinan tipos de puntos de interrupción con scripts de LLDB, zonas de parada temporales y exportación de configuraciones para una depuración reproducible. Veamos las técnicas más útiles, respaldadas por la práctica de los ingenieros de Apple y Google.

Aislamiento de Código Sospechoso

Al depurar errores difíciles de encontrar, utilice una combinación de un breakpoint en la entrada del método y un watchpoint en el cambio de una variable clave. Establezca un breakpoint lineal antes de la asignación y luego cree un watchpoint en la variable mediante el comando LLDB watchpoint set variable. Cuando el valor cambie, el depurador se detendrá independientemente de dónde se haya producido la modificación. Según Google, este enfoque permite encontrar el origen de una condición de carrera en el 90% de los casos en una sola sesión de depuración.

lldb
(lldb) watchpoint set variable self->_balance
Watchpoint 1: addr = 0x600000c4b80 size = 8
    state = enabled  type = w
    watchpoint spec: 'self._balance'
(lldb) watchpoint list
1: location = 0x600000c4b80, type = write, variable = '_balance'

Grupos de Breakpoints para Escenarios de Prueba

Xcode permite agrupar breakpoints a través del Breakpoint Navigator. Cree un grupo separado para cada escenario — por ejemplo, “inicio de sesión”, “compra”, “errores de red”. Al probar una funcionalidad específica, active solo el grupo correspondiente, desactivando los demás. Esto evita disparos falsos y acelera la depuración en proyectos grandes donde el número de puntos de interrupción puede superar varias decenas. Exportar un grupo a un archivo permite compartir la configuración con colegas a través del control de versiones.

Automatización con Scripts de LLDB

Para escenarios complejos, LLDB admite la ejecución de scripts de Python al activarse un breakpoint. En la acción del breakpoint, especifique script import my_debug_helper; my_debug_helper.log_state(). Esto abre posibilidades ilimitadas: recopilación automática de estadísticas, comparación de estados entre llamadas, generación de informes de cobertura de depuración. Según Apple, la API de Python de LLDB se utiliza en Xcode Cloud para el análisis automático de caídas durante las pruebas de CI.

Preguntas Frecuentes

¿Los breakpoints afectan la velocidad de la aplicación?

Los breakpoints inactivos no afectan al rendimiento — solo se compilan en la configuración Debug. Los puntos activos ralentizan la ejecución debido al mecanismo de interrupción de hardware, pero solo durante la depuración.

¿Se puede establecer un breakpoint en una biblioteca de terceros sin código fuente?

Sí, mediante un Symbolic breakpoint por nombre de método o función. LLDB se detendrá al llamarse al símbolo, incluso si el código fuente no está disponible. Además, se puede usar el desensamblador de LLDB para la navegación paso a paso.

¿Cuál es la diferencia entre Step Over y Step Into?

Step Over ejecuta la línea actual completa (incluyendo llamadas a funciones) y se detiene en la siguiente. Step Into entra dentro de la función llamada, permitiendo depurarla paso a paso. Step Out devuelve el control al llamante.

¿Cómo guardar breakpoints entre sesiones de Xcode?

Los breakpoints se guardan automáticamente en xcuserdata dentro del proyecto. Para compartir con colegas, use la exportación a través de Breakpoint Navigator → Share. El archivo .xcbkptlist se puede añadir al repositorio si la depuración es en equipo.

¿Qué hacer si un breakpoint no detiene el programa?

Verifique la configuración Debug de la compilación, la actividad del breakpoint (icono azul), la corrección del símbolo para breakpoints simbólicos y que el código fuente coincida con el binario ejecutable — a menudo ayuda Clean Build Folder.

Resumen

  • Breakpoint — la herramienta principal de depuración, que pausa la ejecución del programa en una línea especificada para el análisis del estado.
  • Xcode admite 5 tipos de puntos de interrupción: lineales, condicionales, simbólicos, de excepción y Swift Error.
  • Los breakpoints condicionales se activan solo cuando se cumple una expresión especificada — ideal para bucles y arrays.
  • LLDB proporciona decenas de comandos para la gestión programática de breakpoints, incluyendo desactivación masiva y expresiones regulares.
  • Los breakpoints de excepción y Swift Error capturan errores antes de que lleguen a un bloque catch, simplificando el diagnóstico de caídas.
  • Las acciones de breakpoint (registro, sonido, scripts) reemplazan las expresiones print temporales sin modificar el código fuente.
  • Un watchpoint combinado con un breakpoint permite rastrear cambios de variables desde cualquier punto del programa.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también