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.
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
Compilacao para Depuracao
Para gerar bytecode depuravel, compile com estas flags:
| Flag | Proposito |
|---|---|
-gh | Gerar simbolos de depuracao (numeros de linha, nomes de variaveis, info de escopo) |
-b | Saida 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:
- Rastreie a linha fonte atual sendo executada
- Inspecione e modifique variaveis locais e estaticas
- Avalie expressoes no escopo atual
- Implemente operacoes de passo a passo (step-over, step-into, step-out)
- Verifique hits de pontos de interrupcao
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:
| Icone | Atalho | Acao | Descricao |
|---|---|---|---|
| ▶ | F5 | Executar / Continuar | Iniciar execucao ou continuar de um ponto de interrupcao |
| ⏸ | F6 | Pausar | Pausar execucao na linha atual |
| ↓ | F7 | Step Into | Executar a linha atual; se chamar uma funcao, entrar nela |
| → | F8 | Step Over | Executar a linha atual; pular chamadas de funcao |
| ■ | Shift+F5 | Parar | Encerrar a sessao de depuracao |
Paineis Ancoraveis do Depurador
O depurador fornece cinco abas ancoraveis que podem ser organizadas conforme seu fluxo de trabalho:
| Aba | Descricao |
|---|---|
| Watch | Adicione expressoes para monitorar seus valores em tempo real. Suporta expressoes Harbour como oForm:cTitle, aArray[1] e chamadas de funcao. |
| Locais | Mostra todas as variaveis locais no escopo da funcao atual, incluindo tipos e valores atuais. Expande automaticamente arrays e objetos. |
| Pilha de Chamadas | Exibe 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 Interrupcao | Lista de todos os pontos de interrupcao com arquivo, linha, condicao e contador de hits. Habilitar/desabilitar ou excluir pontos individualmente. |
| Saida | Saida 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:
- Ponto de interrupcao padrao — pausa a execucao quando a linha e alcancada.
- Ponto de interrupcao condicional — clique direito em um ponto de interrupcao para definir uma expressao Harbour; a execucao pausa apenas quando a expressao avalia para
.T. - Ponto de interrupcao por contador — pausar apenas apos o ponto de interrupcao ter sido atingido N vezes.
Fluxo de Trabalho da Sessao de Depuracao
- Compile com flags de depuracao — Pressione F9 para build; o IDE adiciona automaticamente
-gh -bao depurar. - Defina pontos de interrupcao — Clique na margem nas linhas onde deseja pausar.
- Inicie a depuracao — Pressione F5 ou clique no botao Executar.
- Inspecione variaveis — Use as abas Watch e Locais para examinar o estado.
- Avance pelo codigo — Use F7 (Step Into) ou F8 (Step Over) para avancar.
- Navegue pela pilha de chamadas — Clique em frames no painel Pilha de Chamadas para ver o contexto.
- Parar — Pressione Shift+F5 para encerrar a sessao.
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:
| # | Teste | Verifica |
|---|---|---|
| 1 | Definir e atingir ponto de interrupcao | Execucao pausa na linha correta |
| 2 | Step Into em chamada de funcao | Depurador entra na funcao chamada |
| 3 | Step Over em chamada de funcao | Depurador pula o corpo da funcao |
| 4 | Step Out de funcao | Depurador retorna ao chamador |
| 5 | Inspecao de variaveis locais | Painel Locais mostra nomes e valores corretos |
| 6 | Inspecao de variaveis estaticas | Variaveis estaticas estao visiveis e corretas |
| 7 | Avaliacao de expressao Watch | Expressoes sao avaliadas com precisao |
| 8 | Precisao da pilha de chamadas | Frames da pilha correspondem a cadeia de chamadas real |
| 9 | Ponto condicional (verdadeiro) | Pausa quando a condicao e satisfeita |
| 10 | Ponto condicional (falso) | Nao pausa quando a condicao falha |
| 11 | Ponto por contador | Pausa apenas apos N hits |
| 12 | Habilitar/desabilitar ponto | Alternancia funciona corretamente |
| 13 | Multiplos pontos de interrupcao | Todos os pontos sao respeitados |
| 14 | Inspecao de elemento de array | Elementos de array exibidos corretamente |
| 15 | Inspecao de propriedade de objeto | Propriedades de objeto sao navegaveis |
| 16 | Limpeza da sessao de depuracao | Recursos sao liberados ao parar |
Resumo de Atalhos do Depurador
| Atalho | Acao |
|---|---|
| F5 | Executar / Continuar |
| F6 | Pausar |
| F7 | Step Into |
| F8 | Step Over |
| Shift+F5 | Parar depuracao |
| F9 | Alternar ponto de interrupcao na linha atual |
| Ctrl+Shift+F9 | Limpar todos os pontos de interrupcao |
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.