Comunicação com o Sistema Operacional
Muitas vezes focamos apenas na interface visual (GUI) e esquecemos que nosso programa vive dentro de um ecossistema. Um bom software deve ser capaz de informar ao sistema operacional e a outros processos se sua execução foi bem-sucedida ou se algo deu errado no caminho.
Neste artigo, vamos desmistificar o uso de logs via terminal, entender os fluxos de saída padrão e como os códigos de saída (exit codes) são fundamentais para automação e diagnóstico.
O que é um 'Exit Code'?
'Exit code' (às vezes chamado de 'exit status') é um código numérico deixado pelo programa assim que é encerrado. O padrão POSIX, seja no Windows ou Linux, espera que um exit code igual a zero signifique sucesso. Valores diferentes de zero indicam alertas ou erros fatais.
Exemplos comuns de códigos padrão:
- 1: Erro genérico
- 2: Arquivo não encontrado (File not found)
- 5: Acesso negado
Stdout e Stderr
Stdout é a interface de tela padrão. Stderr é o canal reservado para erros de sistema. Redirecionar o Stderr para arquivos de log permite que administradores monitorem falhas sem precisar interagir com a interface visual.
Implementação no Free Pascal
Para enviar mensagens ao terminal (mesmo em aplicações GUI), usamos WriteLn direcionado ao dispositivo correto:
if not FileExists('configure.ini') then
begin
// Envia erro para o canal de erros do sistema
WriteLn(stderr, 'Arquivo "configure.ini" não encontrado.');
// Encerra o programa com código de erro 2 (File Not Found)
Halt(2);
end;
Visualizando saídas em aplicações GUI
Por padrão, o Windows esconde o terminal em aplicações GUI. Para habilitar a visualização durante o desenvolvimento, vá em Project | Options | Compiler Options | Config and Target e desmarque a opção Win32 gui application (-WG).
Desmarcar -WG permite exibir um terminal acompanhando a aplicação visual.
Exemplo de mensagens WriteLn sendo capturadas pelo terminal.
Depurando o Exit Code
No Lazarus, você pode configurar a IDE para avisar quando um programa termina com erro. Vá em Tools | Options | Debugger | General e ative Show message on stop with Error (exit Code<>0).
Uso em Scripts
No Windows, você verifica o resultado com %ERRORLEVEL%. No Linux, use $?. Isso permite criar automações robustas:
# Exemplo em script Batch (Windows)
meu_app.exe
if %ERRORLEVEL% neq 0 (
echo "Ocorreu uma falha crítica!"
)
Conclusão
Fazer uso de stdout/stderr e exit codes eleva o nível de profissionalismo do seu software. Isso garante que sua aplicação possa interoperar com scripts de backup, agendadores de tarefas e serviços de monitoramento de rede.
Ao desenvolver, lembre-se: se o programa falhar, não apenas feche a janela. Informe ao sistema por que ele falhou. Isso poupará horas de suporte e diagnóstico no futuro.