Depurador Integrado

O HarbourBuilder inclui um depurador totalmente integrado que roda no mesmo processo via o formato de bytecode .hrb. Sem processo de depuracao externo, sem sobrecarga de comunicacao entre processos — o depurador faz parte da propria VM Harbour, proporcionando uma experiencia de depuracao perfeita com controle total sobre a execucao.

Depuracao em Processo

Diferente de depuradores tradicionais que se anexam a um processo em execucao, o depurador do HarbourBuilder opera dentro da mesma VM Harbour. Isso significa latencia zero para inspecao de variaveis, hits de pontos de interrupcao instantaneos e informacoes precisas de pilha de chamadas a todo momento.

Arquitetura

graph TB A["Codigo Fonte (.prg)"] --> B["Compilador Harbour\nharbour -gh -b"] B --> C["Bytecode .hrb\n(simbolos de depuracao)"] C --> D["VM Harbour\ncom API hb_dbg_*"] D --> E["Hook de Depuracao\nhb_dbg_SetEntry"] E --> F["UI do Depurador do IDE"] F --> G["Painel Watch"] F --> H["Painel Locais"] F --> I["Painel Pilha de Chamadas"] F --> J["Painel Pontos de Interrupcao"] F --> K["Painel de Saida"] style A fill:#d2a8ff,stroke:#bc8cff,color:#0d1117 style B fill:#58a6ff,stroke:#388bfd,color:#0d1117 style D fill:#3fb950,stroke:#2ea043,color:#0d1117 style F fill:#f0883e,stroke:#db6d28,color:#0d1117

Compilacao para Depuracao

Para gerar bytecode depuravel, compile com estas flags:

FlagProposito
-ghGerar simbolos de depuracao (numeros de linha, nomes de variaveis, info de escopo)
-bSaida em bytecode .hrb em vez de fonte C
harbour myapp.prg -gh -b

O arquivo .hrb contem todas as informacoes que o depurador precisa para mapear instrucoes de bytecode de volta para linhas de codigo fonte, exibir nomes de variaveis e reconstruir a pilha de chamadas.

O Hook de Depuracao: hb_dbg_SetEntry

No nucleo do suporte a depuracao do Harbour esta a funcao hook hb_dbg_SetEntry(). Este callback e invocado pela VM Harbour em cada instrucao de bytecode quando o modo de depuracao esta ativo, permitindo que o IDE:

Como o Hook Funciona

Quando o Harbour executa um arquivo .hrb compilado com -gh, cada instrucao aciona uma chamada a hb_dbg_SetEntry. O IDE registra seu proprio callback via hb_dbg_SetEntry(), recebendo o arquivo atual, numero da linha, nome da funcao e contexto de variaveis a cada passo.

Barra de Ferramentas de Depuracao

A barra de ferramentas de depuracao fornece cinco controles essenciais de execucao:

IconeAtalhoAcaoDescricao
F5Executar / ContinuarIniciar execucao ou continuar de um ponto de interrupcao
F6PausarPausar execucao na linha atual
F7Step IntoExecutar a linha atual; se chamar uma funcao, entrar nela
F8Step OverExecutar a linha atual; pular chamadas de funcao
Shift+F5PararEncerrar a sessao de depuracao

Paineis Ancoraveis do Depurador

O depurador fornece cinco abas ancoraveis que podem ser organizadas conforme seu fluxo de trabalho:

AbaDescricao
WatchAdicione expressoes para monitorar seus valores em tempo real. Suporta expressoes Harbour como oForm:cTitle, aArray[1] e chamadas de funcao.
LocaisMostra todas as variaveis locais no escopo da funcao atual, incluindo tipos e valores atuais. Expande automaticamente arrays e objetos.
Pilha de ChamadasExibe a pilha de chamadas completa com nomes de arquivo, numeros de linha e nomes de funcoes. Clique em qualquer frame para navegar ate aquela localizacao no fonte.
Pontos de InterrupcaoLista de todos os pontos de interrupcao com arquivo, linha, condicao e contador de hits. Habilitar/desabilitar ou excluir pontos individualmente.
SaidaSaida do console da aplicacao em depuracao, incluindo saida ? e ?? , logs MsgInfo() e mensagens de trace de depuracao.

Definindo Pontos de Interrupcao

Clique na margem ao lado de qualquer numero de linha para alternar um ponto de interrupcao. Pontos de interrupcao sao indicados por um ponto vermelho:

Fluxo de Trabalho da Sessao de Depuracao

  1. Compile com flags de depuracao — Pressione F9 para build; o IDE adiciona automaticamente -gh -b ao depurar.
  2. Defina pontos de interrupcao — Clique na margem nas linhas onde deseja pausar.
  3. Inicie a depuracao — Pressione F5 ou clique no botao Executar.
  4. Inspecione variaveis — Use as abas Watch e Locais para examinar o estado.
  5. Avance pelo codigo — Use F7 (Step Into) ou F8 (Step Over) para avancar.
  6. Navegue pela pilha de chamadas — Clique em frames no painel Pilha de Chamadas para ver o contexto.
  7. Parar — Pressione Shift+F5 para encerrar a sessao.
Dica Rapida

Voce pode passar o mouse sobre qualquer variavel no editor fonte enquanto pausado para ver seu valor atual em um tooltip. Isso funciona para variaveis locais, propriedades de objetos e elementos de array.

Cobertura de Testes Unitarios

O subsistema de depuracao e coberto por 16 testes unitarios que verificam:

#TesteVerifica
1Definir e atingir ponto de interrupcaoExecucao pausa na linha correta
2Step Into em chamada de funcaoDepurador entra na funcao chamada
3Step Over em chamada de funcaoDepurador pula o corpo da funcao
4Step Out de funcaoDepurador retorna ao chamador
5Inspecao de variaveis locaisPainel Locais mostra nomes e valores corretos
6Inspecao de variaveis estaticasVariaveis estaticas estao visiveis e corretas
7Avaliacao de expressao WatchExpressoes sao avaliadas com precisao
8Precisao da pilha de chamadasFrames da pilha correspondem a cadeia de chamadas real
9Ponto condicional (verdadeiro)Pausa quando a condicao e satisfeita
10Ponto condicional (falso)Nao pausa quando a condicao falha
11Ponto por contadorPausa apenas apos N hits
12Habilitar/desabilitar pontoAlternancia funciona corretamente
13Multiplos pontos de interrupcaoTodos os pontos sao respeitados
14Inspecao de elemento de arrayElementos de array exibidos corretamente
15Inspecao de propriedade de objetoPropriedades de objeto sao navegaveis
16Limpeza da sessao de depuracaoRecursos sao liberados ao parar

Resumo de Atalhos do Depurador

AtalhoAcao
F5Executar / Continuar
F6Pausar
F7Step Into
F8Step Over
Shift+F5Parar depuracao
F9Alternar ponto de interrupcao na linha atual
Ctrl+Shift+F9Limpar todos os pontos de interrupcao
Proximos Passos

Apos a depuracao, use Compilar & Executar para compilar uma build de release sem simbolos de depuracao para distribuicao. Builds de release sao menores e mais rapidas pois omitem as flags -gh -b.

Nesta Página

Primeiros Passos Paleta de Componentes Recursos do IDE Tutoriais Referencia Plataformas Arquitetura Compilacao para Depuracao O Hook de Depuracao: hb_dbg_SetEntry Barra de Ferramentas de Depuracao Paineis Ancoraveis do Depurador Definindo Pontos de Interrupcao Fluxo de Trabalho da Sessao de Depuracao Cobertura de Testes Unitarios Resumo de Atalhos do Depurador