Enviando informações de depuração para o Event Log do Delphi
Um dos mais tradicionais métodos utilizados para depurar aplicações é enviar informação para um label, edit, arquivo, showmessage e outros mais. Muitas vezes o tempo e necessidade nos faz utilizar métodos diferentes.
No Delphi você tem a janela chamada Event Log que apresenta diversas mensagens enviada pelo IDE quando você executa uma aplicação em modo de debug, veja a figura abaixo.
Nada mais pratico do que você fazer o mesmo com suas aplicações, porque não adicionar suas mensagens ao event log? É pratico e fácil, não se preocupe com o fato de misturar as mensagens, você configurar a janela Event Log para apresentar os seus logs com uma cor diferente e desta forma facilitar a visualização. Na janela Event Log, com o botão direito selecione propriedades e configurar a cor do Debug Output String, veja a figura abaixo:
Com o seu ambiente configurado, basta agora utilizar o método OutputDebugString que é parte da unit Windows, como dica adicional eu recomendo utilizar o método IsDebuggerPresent para garantir que este método será usando apenas quando a aplicação estiver sem executada em modo de debug. Como boa prática eu utilizo uma classe que contém um class method para enviar a mensagem para o Event Log, abaixo o código.
unit DebugHelper;
interface
uses Windows;
type
TDebuggerHelper = class
public
{ public declarations }
class procedure LogDebug( s : String);
end;
function IsDebuggerPresent: LongBool; external kernel32 name 'IsDebuggerPresent';
implementation
{ TDebuggerHelper }
class procedure TDebuggerHelper.LogDebug(s: String);
begin
if IsDebuggerPresent then
OutputDebugString(PWideChar(s));
end;
end.
A classe TDebuggerHelper contém o método LogDebug que irá receber o conteúdo String a ser enviado ao Event Log, este método utiliza o método IsDebuggerPresent para certificar que a mensagem será enviada apenas quando a aplicação estiver sendo executada em modo de debug.
Abaixo um exemplo onde esta técnica foi utilizada para saber exatamente em que momento foi criada a classe TUser, utilizei neste caso o Event Log para validar que o controle de instâncias do DataSnap estivesse funcionando corretamente.
procedure TDMServerContainer.DSSCUserCreatereInstance
(DSCreateInstanceEventObject: TDSCreateInstanceEventObject);
begin
if not Assigned(User) then
begin
User := TUser.Create;
TDebuggerHelper.LogDebug('Create a TUser instance');
end
else
TDebuggerHelper.LogDebug('TUser already exist');
DSCreateInstanceEventObject.ServerClassInstance := User;
end;
Você pode fazer o download do código fonte do DataSnap onde foi utilizado esta técnica aqui





Muito boa a dica, parabens.
Pretendo usar em meus sistemas.
Valeu pela dica!
mto bom, simples e mto util…