{"id":498,"date":"2009-12-18T08:50:01","date_gmt":"2009-12-18T00:50:01","guid":{"rendered":"http:\/\/www.andreanolanusse.com\/pt\/?p=498"},"modified":"2011-03-08T12:19:51","modified_gmt":"2011-03-08T04:19:51","slug":"enviando-informacoes-de-depuracao-para-o-event-log-do-delphi","status":"publish","type":"post","link":"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/","title":{"rendered":"Enviando informa\u00e7\u00f5es de depura\u00e7\u00e3o para o Event Log do Delphi"},"content":{"rendered":"<p>Um dos mais tradicionais m\u00e9todos utilizados para depurar aplica\u00e7\u00f5es \u00e9 enviar informa\u00e7\u00e3o para um label, edit, arquivo, showmessage e outros mais. Muitas vezes o tempo e necessidade nos faz utilizar m\u00e9todos diferentes.<\/p>\n<p>No Delphi voc\u00ea tem a janela chamada Event Log que apresenta diversas mensagens enviada pelo IDE quando voc\u00ea executa uma aplica\u00e7\u00e3o em modo de debug, veja a figura abaixo.<\/p>\n<p><a rel=\"attachment wp-att-499\" href=\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/debug\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-499\" title=\"Debug\" src=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug.png\" alt=\"Debug\" width=\"529\" height=\"263\" srcset=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug.png 657w, http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug-320x159.png 320w\" sizes=\"(max-width: 529px) 100vw, 529px\" \/><\/a><\/p>\n<p>Nada mais pratico do que voc\u00ea fazer o mesmo com suas aplica\u00e7\u00f5es, porque n\u00e3o adicionar suas mensagens ao event log? \u00c9 pratico e f\u00e1cil, n\u00e3o se preocupe com o fato de misturar as mensagens, voc\u00ea configurar a janela Event Log para apresentar os seus logs com uma cor diferente e desta forma facilitar a visualiza\u00e7\u00e3o. Na janela Event Log, com o bot\u00e3o direito selecione propriedades e configurar a cor do Debug Output String, veja a figura abaixo:<\/p>\n<p><a rel=\"attachment wp-att-500\" href=\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/debug2\/\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-500\" title=\"Debug setup\" src=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug2.png\" alt=\"Debug setup\" width=\"565\" height=\"383\" srcset=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug2.png 689w, http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug2-258x175.png 258w\" sizes=\"(max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<p>Com o seu ambiente configurado, basta agora utilizar o m\u00e9todo OutputDebugString que \u00e9 parte da unit Windows, como dica adicional eu recomendo utilizar o m\u00e9todo IsDebuggerPresent para garantir que este m\u00e9todo ser\u00e1 usando apenas quando a aplica\u00e7\u00e3o estiver sem executada em modo de debug. Como boa pr\u00e1tica eu utilizo uma classe que cont\u00e9m um class method para enviar a mensagem para o Event Log, abaixo o c\u00f3digo.<\/p>\n<pre class=\"brush: pascal\">unit DebugHelper;\r\n\r\ninterface\r\n\r\nuses Windows;\r\n\r\ntype\r\n  TDebuggerHelper = class\r\n  public\r\n   { public declarations }\r\n   class procedure LogDebug( s : String);\r\n  end;\r\n\r\n  function IsDebuggerPresent: LongBool; external kernel32 name 'IsDebuggerPresent';\r\n\r\nimplementation\r\n\r\n{ TDebuggerHelper }\r\n\r\nclass procedure TDebuggerHelper.LogDebug(s: String);\r\nbegin\r\n  if IsDebuggerPresent then\r\n     OutputDebugString(PWideChar(s));\r\nend;\r\n\r\nend.<\/pre>\n<p>A classe TDebuggerHelper cont\u00e9m o m\u00e9todo LogDebug que ir\u00e1 receber o conte\u00fado String a ser enviado ao Event Log, este m\u00e9todo utiliza o m\u00e9todo IsDebuggerPresent para certificar que a mensagem ser\u00e1 enviada apenas quando a aplica\u00e7\u00e3o estiver sendo executada em modo de debug.<\/p>\n<p>Abaixo um exemplo onde esta t\u00e9cnica 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\u00e2ncias do <strong><a href=\"http:\/\/www.andreanolanusse.com\/pt\/tag\/datasnap\/\">DataSnap<\/a><\/strong> estivesse funcionando corretamente.<\/p>\n<pre class=\"brush: pascal\">procedure TDMServerContainer.DSSCUserCreatereInstance\r\n  (DSCreateInstanceEventObject: TDSCreateInstanceEventObject);\r\nbegin\r\n  if not Assigned(User) then\r\n  begin\r\n    User := TUser.Create;\r\n    TDebuggerHelper.LogDebug('Create a TUser instance');\r\n  end\r\n  else\r\n    TDebuggerHelper.LogDebug('TUser already exist');\r\n  DSCreateInstanceEventObject.ServerClassInstance := User;\r\nend;<\/pre>\n<p>Voc\u00ea pode fazer o download do c\u00f3digo fonte do DataSnap onde foi utilizado esta t\u00e9cnica <a href=\"http:\/\/cc.embarcadero.com\/Item\/27391\"><strong>aqui<\/strong><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um dos mais tradicionais m\u00e9todos utilizados para depurar aplica\u00e7\u00f5es \u00e9 enviar informa\u00e7\u00e3o para um label, edit, arquivo, showmessage e outros mais. Muitas vezes o tempo e necessidade nos faz utilizar m\u00e9todos diferentes. No Delphi voc\u00ea tem a janela chamada Event Log que apresenta diversas mensagens enviada pelo IDE quando voc\u00ea executa uma aplica\u00e7\u00e3o em modo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_s2mail":"","footnotes":""},"categories":[102],"tags":[181],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Enviando informa\u00e7\u00f5es de depura\u00e7\u00e3o para o Event Log do Delphi | Andreano Lanusse | Tecnologia e Desenvolvimento de Software<\/title>\n<meta name=\"description\" content=\"Um dos mais tradicionais m\u00e9todos utilizados para depurar aplica\u00e7\u00f5es \u00e9 enviar informa\u00e7\u00e3o para um label, edit, arquivo, showmessage e outros mais. Muitas\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enviando informa\u00e7\u00f5es de depura\u00e7\u00e3o para o Event Log do Delphi | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"og:description\" content=\"Um dos mais tradicionais m\u00e9todos utilizados para depurar aplica\u00e7\u00f5es \u00e9 enviar informa\u00e7\u00e3o para um label, edit, arquivo, showmessage e outros mais. Muitas\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/\" \/>\n<meta property=\"og:site_name\" content=\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"article:published_time\" content=\"2009-12-18T00:50:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2011-03-08T04:19:51+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:site\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\">\n\t<meta name=\"twitter:data1\" content=\"2 minutos\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"description\":\"Andreano Lanusse blog - artigos, tutoriais e v&iacute;deos sobre tecnologia, desenvolvimento de software (Delphi XE4, C#, PHP, .NET) e t&eacute;cnicas de programa&ccedil;&atilde;o\",\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/www.andreanolanusse.com\/pt\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug.png\",\"contentUrl\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2009\/12\/debug.png\",\"width\":657,\"height\":327},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#webpage\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/\",\"name\":\"Enviando informa\\u00e7\\u00f5es de depura\\u00e7\\u00e3o para o Event Log do Delphi | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#primaryimage\"},\"datePublished\":\"2009-12-18T00:50:01+00:00\",\"dateModified\":\"2011-03-08T04:19:51+00:00\",\"description\":\"Um dos mais tradicionais m\\u00e9todos utilizados para depurar aplica\\u00e7\\u00f5es \\u00e9 enviar informa\\u00e7\\u00e3o para um label, edit, arquivo, showmessage e outros mais. Muitas\",\"breadcrumb\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#webpage\"}}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#webpage\"},\"author\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"headline\":\"Enviando informa\\u00e7\\u00f5es de depura\\u00e7\\u00e3o para o Event Log do Delphi\",\"datePublished\":\"2009-12-18T00:50:01+00:00\",\"dateModified\":\"2011-03-08T04:19:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#webpage\"},\"commentCount\":3,\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"image\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#primaryimage\"},\"keywords\":[\"Delphi\"],\"articleSection\":[\"Delphi\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/enviando-informacoes-de-depuracao-para-o-event-log-do-delphi\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\",\"name\":\"Andreano Lanusse\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"caption\":\"Andreano Lanusse\"},\"logo\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\"},\"sameAs\":[\"https:\/\/twitter.com\/andreanolanusse\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/498"}],"collection":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/comments?post=498"}],"version-history":[{"count":0,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/498\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media?parent=498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/categories?post=498"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/tags?post=498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}