Enviando informações de depuração para o Event Log do Delphi
in Delphi (Win32) by Andreano Lanusse — 18 de dezembro de 2009 at 8:50 | 1 comment
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
Posts relacionados
- Teste nosso servidor DataSnap XE instalado no Amazon Cloud
- DataSnap XE e Windows Azure – RAD Studio XE Preview #3
- Delphi Tour 2010 – slides e exemplos disponibilizados para download
- Delphi Tour 2010 – Um resumo do que será o evento
- Delphi Tour 2010
- Como utilizar parâmetros em dbExpress (DBX) Framework
Tags: DataSnap Debug Delphi (Win32) Embarcadero
Tags
Posts Recentes
Utilizando expressões regulares para validar endereço IP no Delphi XE
Delphi (Win32) | setembro 9, 2010 | 1 comment
Ao comprar Delphi XE (aka Delphi 2011) você recebe as versões do Delphi 7, 2007, 2009 e 2010
Delphi (Win32), Delphi Prism (.NET) | setembro 8, 2010 | 2 comments
Teste nosso servidor DataSnap XE instalado no Amazon Cloud
Delphi (Win32) | setembro 3, 2010 | 1 comment
Vídeos
Usando Rapid SQL XE com InterBase e Firebird
Database | junho 29, 2010 | 3 comments
Delphi, ER/Studio e DB Optimizer em ação
Database, Delphi (Win32), Delphi Prism (.NET) | maio 25, 2010 | 1 comment
Mais previews sobre a próxima versão do Delphi for PHP
RadPHP (Delphi for PHP) | maio 7, 2010 | 14 comments
Apresentações do Delphi Conference Online disponibilizadas para download
Delphi (Win32) | fevereiro 27, 2010 | 5 comments











Developer Network
1 Comments
Muito boa a dica, parabens.
Pretendo usar em meus sistemas.