> For the complete documentation index, see [llms.txt](https://unigui-doc.falconsistemas.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unigui-doc.falconsistemas.com.br/guia-do-desenvolvedor/usando-uma-ferramenta-de-depuracao-de-terceiros/eurekalog.md).

# EurekaLog

EurekaLog

[EurekaLog](https://www.eurekalog.com/) é uma ferramenta avançada de depuração para aplicações Delphi. De acordo com o EurekaLog: "EurekaLog é a ferramenta rastreadora de exceções que dá à sua aplicação a capacidade de capturar todos os bugs no seu código e gera um log detalhado com a pilha de chamadas, que inclui informações de unidade, classe, método e número da linha. Essas informações também são registradas em um arquivo e podem opcionalmente ser encaminhadas para você (desenvolvedor da aplicação) via Internet."

Na maioria das vezes, quando uma exceção ocorre na sua aplicação, você verá uma mensagem na tela do cliente e também uma linha de log no arquivo de log do uniGUI. Essas informações serão úteis apenas se o tipo de exceção for conhecido e você puder reproduzi-la repetidamente. Se a exceção for um AV (Access Violation) aleatório ou qualquer outra exceção que ocorra raramente, pode ser difícil encontrar a origem exata do erro. O EurekaLog ajudará você a encontrar o número exato da linha no seu código-fonte que está gerando a exceção.

O EurekaLog pode funcionar com aplicações uniGUI após fazer algumas alterações na sua configuração e no DPR da aplicação. Após instalar o EurekaLog, abra seu projeto uniGUI e siga os passos abaixo.

{% stepper %}
{% step %}

### 1. Abra as Opções do EurekaLog e importe as configurações do uniGUI

Vá em "Project -> EurekaLog Options".

![clip0116](/files/1ce1f1c26c83010be03cef992b2bef6ebae7288f)

Selecione Import e escolha o `uniGUI.dof` arquivo que está disponível na pasta ..\uniGUI\Utils\EurekaLog\\.

![clip0117](/files/826c511412657e6e17e5c97dcf22d58df7e151e6)

Após a importação ser concluída, pressione OK para continuar.

![clip0118](/files/e0ed42b591f7e523b7637e725de69ed9e3ab664a)
{% endstep %}

{% step %}

### 2. Edite seu arquivo DPR

No Delphi, abra seu arquivo DPR e adicione a `EAppUniGUI` unit à cláusula uses para que o DPR fique semelhante a isto:

```pascal
program Project1doc;

uses

{$IFDEF EurekaLog}
  EMemLeaks,
  EResLeaks,
  ExceptionLog7,
{$ENDIF EurekaLog}

  EAppUniGUI, // adicione esta linha
  Forms,
  ServerModule in 'ServerModule.pas' {UniServerModule: TUniGUIServerModule},
  MainModule in 'MainModule.pas' {UniMainModule: TUniGUIMainModule},
  Main in 'Main.pas' {MainForm: TUniForm},
  Unit1 em 'Unit1.pas' {UniForm1: TUniForm};

{$R *.res}

begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  TUniServerModule.Create(Application);
  Application.Run;
end.
```

Normalmente, o EurekaLog adiciona apenas:

```pascal
{$IFDEF EurekaLog}
  EMemLeaks,
  EResLeaks,
  ExceptionLog7,
{$ENDIF EurekaLog}
```

Certifique-se de adicionar manualmente `EAppUniGUI` à cláusula uses como mostrado acima.

Observação: Dependendo da sua versão do EurekaLog, a diretiva condicional `{$IFDEF EurekaLog}` pode não ser adicionada automaticamente ao seu código-fonte.
{% endstep %}

{% step %}

### 3. Adicione código de teste que dispare um AV

Para testar a funcionalidade do EurekaLog, adicione código que intencionalmente gere uma Access Violation (AV):

```pascal
procedure TMainForm.UniButton2Click(Sender: TObject);
var
  P: Pointer;
begin
  P := nil;
  PInteger(P)^ := 1; // gere um AV aqui
end;
```

Execute sua aplicação e pressione o botão de teste. Você verá uma simples mensagem de AV na tela e um arquivo de log será criado na pasta do EurekaLog (criada na mesma pasta que sua aplicação).

![clip0120](/files/58f8ca04adc69d1cb7dd2b93c69cbc86be3cbce8)

Esse arquivo de log pode ser aberto pelo EurekaLog Viewer.

![clip0121](/files/9d17b9d6db453d07fe31a843397192d107ffc8c5) ![clip0122](/files/5f943d48e95498d46ee9d2e5ca7a276957132e28)
{% endstep %}

{% step %}

### 4. Mostrar informações detalhadas de erro no cliente web (opcional)

Para mostrar um log de erro mais detalhado na tela do cliente da aplicação web, vá em EurekaLog Options e selecione Dialogs. Em Dialogs, marque "Detailed mode".

![clip0123](/files/fffaa00dbb6f7094499e41eb5b05a9a0d4b69e57)

No modo detalhado, a janela de erro mostrará muito mais informações sobre o rastreamento de pilha:

![clip0124](/files/585f6c8048f3dea9543d6681190277156eee24c7)

Com logs detalhados fornecidos pelo EurekaLog, você pode localizar o local exato no seu código que lança uma exceção, economizando muitas horas de depuração.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Nota importante:

O EurekaLog é uma ferramenta poderosa para encontrar bugs no seu código. Recomenda-se usá-lo apenas em estágios de desenvolvimento e em fases iniciais de produção. Não é recomendado usar o EurekaLog e outras ferramentas similares em ambientes de produção. Essas ferramentas usam técnicas de injeção de código em baixo nível para depurar sua aplicação, portanto podem tornar sua aplicação mais lenta e também causar alguns problemas de instabilidade.

Como mencionado acima, o EurekaLog deve ser removido do seu código em versões estáveis da sua aplicação, assim que você decidir implantá-la em um ambiente de produção.
{% endhint %}

{% hint style="info" %}
Observação sobre projetos combo ISAPI/Standalone:

Quando seu projeto é um projeto combo e você habilita o EurekaLog, seu projeto pode reconhecer o EurekaLog em apenas um desses modos (ISAPI ou Standalone). Isso acontece porque o EurekaLog não é compatível com o arquivo de projeto combo do uniGUI.

Para resolver esse problema, crie projetos separados para os modos ISAPI e Standalone. Você pode criar um novo projeto ISAPI e importar seus formulários e módulos para ele. Depois de ter projetos separados, você pode adicionar e habilitar o EurekaLog para cada projeto.
{% endhint %}
