Depurador Integrado

HarbourBuilder incluye un depurador completamente integrado que se ejecuta en proceso mediante el formato de bytecode .hrb. Sin proceso de depurador externo, sin sobrecarga de comunicacion entre procesos — el depurador es parte del propio Harbour VM, proporcionando una experiencia de depuracion sin fisuras con control total sobre la ejecucion.

Depuracion en Proceso

A diferencia de los depuradores tradicionales que se adjuntan a un proceso en ejecucion, el depurador de HarbourBuilder opera dentro del mismo Harbour VM. Esto significa latencia cero para la inspeccion de variables, hits de puntos de interrupcion instantaneos e informacion precisa de la pila de llamadas en todo momento.

Arquitectura

graph TB A["Codigo Fuente (.prg)"] --> B["Compilador Harbour\nharbour -gh -b"] B --> C["Bytecode .hrb\n(simbolos de depuracion)"] C --> D["Harbour VM\ncon API hb_dbg_*"] D --> E["Gancho de Depuracion\nhb_dbg_SetEntry"] E --> F["IDE Depurador UI"] F --> G["Panel Watch"] F --> H["Panel Locales"] F --> I["Panel Pila de Llamadas"] F --> J["Panel Puntos de Interrupcion"] F --> K["Panel de Salida"]

Compilacion para Depuracion

Para generar bytecode depurable, compila con estas banderas:

BanderaProposito
-ghGenerar simbolos de depuracion (numeros de linea, nombres de variables, informacion de alcance)
-bGenerar archivo de bytecode .hrb en lugar de codigo fuente C
harbour miapp.prg -gh -b

El archivo .hrb contiene toda la informacion que el depurador necesita para mapear instrucciones de bytecode de vuelta a lineas de codigo fuente, mostrar nombres de variables y reconstruir la pila de llamadas.

El Gancho de Depuracion: hb_dbg_SetEntry

En el nucleo del soporte de depuracion de Harbour esta la funcion gancho hb_dbg_SetEntry(). Esta funcion de retrollamada es invocada por el Harbour VM en cada instruccion de bytecode cuando el modo de depuracion esta activo, permitiendo al IDE:

Como Funciona el Gancho

Cuando Harbour ejecuta un archivo .hrb compilado con -gh, cada instruccion desencadena una llamada a hb_dbg_SetEntry. El IDE registra su propia funcion de retrollamada mediante hb_dbg_SetEntry(), recibiendo el archivo actual, numero de linea, nombre de funcion y contexto de variables en cada paso.

Barra de Herramientas de Depuracion

La barra de herramientas de depuracion proporciona cinco controles de ejecucion esenciales:

IconoAtajoAccionDescripcion
F5Ejecutar / ContinuarIniciar ejecucion o continuar desde un punto de interrupcion
F6PausarPausar la ejecucion en la linea actual
F7Paso a paso (entrar)Ejecutar la linea actual; si llama a una funcion, entrar en ella
F8Paso a paso (saltar)Ejecutar la linea actual; saltar las llamadas a funciones
Shift+F5DetenerTerminar la sesion de depuracion

Paneles Acoplables del Depurador

El depurador proporciona cinco pestanas acoplables que se pueden organizar segun tu flujo de trabajo:

PestanaDescripcion
WatchAgrega expresiones para monitorear sus valores en tiempo real. Soporta expresiones Harbour como oForm:cTitle, aArray[1] y llamadas a funciones.
LocalesMuestra todas las variables locales en el alcance de la funcion actual, incluyendo sus tipos y valores actuales. Auto-expande arreglos y objetos.
Pila de LlamadasMuestra la pila de llamadas completa con nombres de archivo, numeros de linea y nombres de funcion. Haz clic en cualquier marco para navegar a esa ubicacion de codigo fuente.
Puntos de InterrupcionLista de todos los puntos de interrupcion con archivo, linea, condicion y contador de hits. Habilitar/deshabilitar o eliminar puntos de interrupcion individuales.
SalidaSalida de consola de la aplicacion depurada, incluyendo salida ? y ?? , registros MsgInfo() y mensajes de traza de depuracion.

Configurar Puntos de Interrupcion

Haz clic en el margen junto a cualquier numero de linea para alternar un punto de interrupcion. Los puntos de interrupcion se indican con un punto rojo:

Flujo de Trabajo de Sesion de Depuracion

  1. Compilar con banderas de depuracion — Presiona F9 para construir; el IDE agrega automaticamente -gh -b al depurar.
  2. Establecer puntos de interrupcion — Haz clic en el margen en las lineas donde deseas pausar.
  3. Iniciar depuracion — Presiona F5 o haz clic en el boton Ejecutar.
  4. Inspeccionar variables — Usa las pestanas Watch y Locales para examinar el estado.
  5. Paso a paso por el codigo — Usa F7 (Paso a paso entrando) o F8 (Paso a paso saltando) para avanzar.
  6. Navegar la pila de llamadas — Haz clic en los marcos del panel Pila de Llamadas para ver el contexto.
  7. Detener — Presiona Shift+F5 para terminar la sesion.
Consejo rapido

Puedes pasar el raton sobre cualquier variable en el editor de codigo mientras estas en pausa para ver su valor actual en una descripcion emergente. Esto funciona para variables locales, propiedades de objetos y elementos de arreglos.

Cobertura de Pruebas Unitarias

El subsistema del depurador esta cubierto por 16 pruebas unitarias que verifican:

#PruebaVerifica
1Punto de interrupcion establecido y alcanzadoLa ejecucion se pausa en la linea correcta
2Paso a paso entrando en llamada a funcionEl depurador entra en la funcion llamada
3Paso a paso saltando llamada a funcionEl depurador salta el cuerpo de la funcion
4Paso a paso saliendo de funcionEl depurador retorna al llamador
5Inspeccion de variables localesEl panel Locales muestra nombres y valores correctos
6Inspeccion de variables estaticasLas variables estaticas son visibles y correctas
7Evaluacion de expresion WatchLas expresiones se evaluan con precision
8Precision de la pila de llamadasLos marcos de pila coinciden con la cadena de llamadas real
9Punto de interrupcion condicional (verdadero)Se pausa cuando se cumple la condicion
10Punto de interrupcion condicional (falso)No se pausa cuando no se cumple la condicion
11Punto de interrupcion por contadorSe pausa solo despues de N hits
12Habilitar/deshabilitar punto de interrupcionAlternar funciona correctamente
13Multiples puntos de interrupcionTodos los puntos de interrupcion son respetados
14Inspeccion de elementos de arregloLos elementos del arreglo se muestran correctamente
15Inspeccion de propiedades de objetoLas propiedades del objeto son navegables
16Limpieza de sesion de depuracionLos recursos se liberan al detener

Resumen de Atajos del Depurador

AtajoAccion
F5Ejecutar / Continuar
F6Pausar
F7Paso a paso (entrar)
F8Paso a paso (saltar)
Shift+F5Detener depuracion
F9Alternar punto de interrupcion en la linea actual
Ctrl+Shift+F9Limpiar todos los puntos de interrupcion
Siguientes pasos

Despues de depurar, usa Compilar y Ejecutar para compilar una version de lanzamiento sin simbolos de depuracion para distribucion. Las versiones de lanzamiento son mas pequenas y rapidas ya que omiten las banderas -gh -b.

En Esta Página

Primeros pasos Paleta de componentes Funciones del IDE Tutoriales Referencia Plataformas Arquitectura Compilacion para Depuracion El Gancho de Depuracion: hb_dbg_SetEntry Barra de Herramientas de Depuracion Paneles Acoplables del Depurador Configurar Puntos de Interrupcion Flujo de Trabajo de Sesion de Depuracion Cobertura de Pruebas Unitarias Resumen de Atajos del Depurador