- Inicio
- Habilidades
- Depuracion
- Depuracion por Busqueda Binaria
Depuracion por Busqueda Binaria
Usa busqueda binaria para aislar bugs en codebases grandes dividiendo sistematicamente el espacio del problema a la mitad.
El Problema
Cuando un bug se esconde en una codebase grande — miles de lineas, docenas de modulos — revisar cada linea es impracticable. Los desarrolladores pierden horas poniendo console.log por todos lados. La depuracion por busqueda binaria reduce el espacio de busqueda a la mitad en cada paso, encontrando cualquier bug en O(log n) iteraciones en lugar de O(n).
El Prompt
Eres un estratega de depuracion especializado en aislamiento por busqueda binaria. Ayudame a localizar un bug usando divide y venceras:
DESCRIPCION DEL BUG: [describe el comportamiento incorrecto]
COMPORTAMIENTO ESPERADO: [que deberia pasar]
ALCANCE: [ej. "en algun lugar del flujo de checkout", "en el pipeline de procesamiento de datos"]
TAMANO DE LA CODEBASE: [numero aproximado de archivos/modulos involucrados]
Aplica este protocolo de depuracion por busqueda binaria:
1. **Definir el Observable**: Cual es el sintoma mas claro que puedo verificar para confirmar que el bug esta presente?
2. **Mapear el Pipeline**: Lista cada modulo/funcion/paso por el que pasan los datos desde la entrada hasta la salida erronea.
3. **Encontrar el Punto Medio**: Identifica el punto exacto del pipeline donde debo insertar mi primer checkpoint.
4. **Logica de Decision**: En el punto medio — los datos aun son correctos? SI → bug en la segunda mitad. NO → bug en la primera mitad.
5. **Generar Checkpoints**: Dame los snippets de codigo exactos para cada checkpoint.
6. **Plan de Iteracion**: Mapea el arbol de busqueda binaria completo — cuantas iteraciones se necesitan?
7. **Prueba de Eliminacion**: Despues de cada paso, explica que hemos descartado definitivamente y por que.
Ejemplo de Salida
Pipeline mapeado: Entrada → validateForm() → transformData() → apiCall() → processResponse() → updateState() → renderUI()
Punto medio: Insertar checkpoint DESPUES de apiCall() — verificar si el payload coincide con el schema esperado
Iteracion 1: Si la respuesta es correcta → bug en processResponse/updateState/renderUI (3 pasos)
Iteracion 2: Verificar despues de updateState() → reducido a 1-2 pasos
Total: 3 iteraciones (vs. 7 revisando secuencialmente)
Cuando Usar
Usa este skill cuando el bug esta en alguna parte de una cadena larga de operaciones y no puedes saber inmediatamente cual paso corrompe los datos. Perfecto para pipelines de transformacion de datos, procesamiento de formularios multi-paso y cualquier flujo con mas de 5 etapas.
Tips Pro
- Empieza por el punto medio, no por el inicio — la mayoria de los desarrolladores depuran linealmente. Saltar al medio elimina inmediatamente el 50% del codigo.
- Usa assertions en vez de logs —
assert(data.id !== undefined, 'ID faltante despues del paso 3')detiene la ejecucion en el punto exacto del fallo. - Combina con git bisect — para regresiones,
git bisectaplica busqueda binaria a los commits y encuentra el commit exacto que introdujo el bug. - Crea una “cerca de bugs” — una vez aislada la funcion con el bug, agrega assertions permanentes en sus fronteras como guardias de regresion.