Tema: debugging
-
Modos de fallo de Jev 1.13: lectura literal, conteo, fechas, indirección y degradación del contexto
Los nueve modos de fallo que TypeSafe documenta para jev-1.13 (revisados por el proveedor el 17-09-2026), lo que cada uno implica para un agente que delega decisiones en el modelo, y la solución alternativa documentada para cada uno: condiciones exactas en las instrucciones, aritmética y lógica de fechas en el código, estado filtrado, y no confiar en invariantes estructurales entre preguntas separadas.
-
El método USE para localizar cuellos de botella de rendimiento
Para cada recurso (CPU, memoria, discos, red, bloqueos) comprobar utilización, saturación y errores; el método USE es una lista de verificación que localiza los cuellos de botella con rapidez, sin empezar por conjeturas en la capa de aplicación.
-
Escribir un informe de error útil
Un informe de error es útil cuando una persona ajena puede reproducir el fallo sin necesidad de preguntar: un título preciso, el entorno con sus versiones, pasos numerados para reproducirlo, el resultado esperado y el real por separado, el mensaje de error textual y un ejemplo lo más reducido posible. Las hipótesis sobre la causa van en una sección aparte.
-
Diagnosticar «No queda espacio en el dispositivo» cuando df muestra espacio libre
ENOSPC tiene tres causas frecuentes además de un disco lleno: inodos agotados, espacio retenido por archivos eliminados que un proceso aún tiene abiertos, y el porcentaje de bloques reservados en los sistemas de archivos ext. Conviene comprobar df -i, lsof +L1 y la reserva del punto de montaje antes de eliminar nada.
-
Encontrar una fuga de memoria con instantáneas de tracemalloc
Iniciar el rastreo pronto con PYTHONTRACEMALLOC o tracemalloc.start(nframe), tomar una instantánea después del calentamiento y otra tras N iteraciones, filtrar el ruido de las importaciones, y leer compare_to(..., 'lineno') para encontrar las líneas cuyo tamaño crece proporcionalmente a N; cambiar a la agrupación 'traceback' para ver quién las llama.
-
MTU, fragmentación y descubrimiento de la MTU de ruta
Ethernet transporta paquetes IP de 1500 bytes, los túneles y PPPoE transportan menos, y los routers IPv6 nunca fragmentan. El descubrimiento de la MTU de ruta depende de los mensajes ICMP Packet Too Big; cuando estos se filtran, los paquetes grandes desaparecen silenciosamente mientras los pequeños pasan, el clásico agujero negro que la fijación de la MSS (MSS clamping) o el sondeo en la capa de empaquetado evitan.
-
Búsqueda sistemática de errores en seis pasos
Reproducir el error, observar con precisión, formular una hipótesis con una predicción, un experimento por cambio, registrar las causas descartadas, corregir la causa y protegerla con una prueba de regresión.
-
Registros de ejecución reproducibles para agentes: registrar cada llamada al modelo y a las herramientas
Una ejecución de un agente solo puede depurarse si cada solicitud al modelo, respuesta, llamada a herramienta y resultado de herramienta se registra en orden con identificadores y parámetros; las convenciones semánticas de OpenTelemetry GenAI nombran los campos, y un registro reproducible permite reproducir un fallo sin pagar por una nueva ejecución.
-
Recuperar commits y ramas perdidos con el reflog
El reflog registra cada movimiento de HEAD y de cada rama en el repositorio local, de modo que un reset, rebase, amend o borrado de rama fallido puede deshacerse encontrando la posición anterior y colocando una nueva rama sobre ella; las entradas caducan por defecto a los 90 días (30 para las inalcanzables), y los cambios sin confirmar nunca estuvieron en él.
-
Encontrar con git bisect el commit que introdujo una regresión
git bisect realiza una búsqueda binaria en el historial entre un commit conocido como correcto y uno conocido como defectuoso; con un script de prueba automatizado, encuentra el commit responsable sin inspección manual.
-
Reducir la reproducción de un error sin eliminar la condición que lo causa
Minimizar un ejemplo que falla comprobando que el caso reducido siga demostrando el defecto original y no un error distinto y más fácil de producir.
-
Triage de AddressSanitizer: corregir el primer acceso inválido antes de confiar en el comportamiento posterior
Convertir un informe de AddressSanitizer en un caso de regresión mínimo de propiedad (ownership) o de límites, sin tratar una ejecución limpia como una prueba.
-
Convertir un informe de error en una prueba de regresión
Antes de corregir un error, reproducirlo como una prueba automatizada que falle y que haga referencia al informe; la prueba demuestra la corrección y evita que el error regrese.
-
Bases de datos de compilación: reproducir la unidad de traducción que falla antes de cambiar cabeceras
Usar el comando de compilación real y el directorio de trabajo para distinguir defectos del código fuente de errores de configuración del editor.
-
Trampas de la búsqueda binaria: desbordamiento del punto medio y límites con error de uno
La búsqueda binaria es corta y famosa por lo fácil que es hacerla mal: el punto medio (low + high) / 2 desborda los enteros de ancho fijo, los límites inclusivos y exclusivos se mezclan, y los duplicados plantean la duda de qué índice devolver. Conviene usar una biblioteca o la forma con predicado monótono e intervalos semiabiertos, y probar los casos límite.
-
Elegir la siguiente comprobación de depuración según las hipótesis que permite distinguir
Evita que una investigación repita diagnósticos poco informativos eligiendo cada comprobación según las explicaciones en competencia que su resultado permite separar.
-
Cómo escribir un ejemplo mínimo reproducible
Un ejemplo mínimo reproducible contiene el mínimo de código, datos y entorno con el que aún se manifiesta el problema; elaborarlo suele ser la mitad del diagnóstico y es lo que necesitan los mantenedores y otros agentes para poder ayudar.
-
Diagnóstico de esperas de bloqueo y deadlocks en PostgreSQL con pg_locks, pg_blocking_pids y lock_timeout
Una sentencia que se queda colgada suele estar esperando un bloqueo que mantiene otra transacción: localice la sesión en espera en pg_stat_activity (wait_event_type Lock), a su bloqueador con pg_blocking_pids() y el estado y la última sentencia de este, y después cancele, termine o espere. log_lock_waits registra las esperas superiores a deadlock_timeout, los deadlocks se detectan y se resuelven abortando una transacción, y lock_timeout limita cuánto puede esperar el DDL.
-
Encontrar el commit causante con git bisect
git bisect realiza una búsqueda binaria entre un commit bueno conocido y uno malo; con un script de verificación localiza el primer commit defectuoso sin pruebas manuales.
-
Primer diagnóstico de un proceso que falla con strace y tcpdump
Con strace se ve en qué llamada al sistema está bloqueado un proceso y qué archivos o sockets usa; con tcpdump, usando un filtro estrecho y un límite de paquetes, se comprueba si el otro extremo responde. Ambas herramientas requieren privilegios y ralentizan o llenan recursos, así que hay que acotarlas en tiempo y alcance.
Legible por máquina: JSON