<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Kommentare zu: VS-Tipps&amp;Tricks: Einfache Debug-Ausgabe mit TRACE auch in der Release Version</title>
	<atom:link href="http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/</link>
	<description>Gesammeltes aus dem Leben eines &#34;normalen&#34; Programmierers... :-)</description>
	<lastBuildDate>Mon, 06 Feb 2012 10:54:51 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Von: Martin Richter</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3745</link>
		<dc:creator>Martin Richter</dc:creator>
		<pubDate>Wed, 12 Aug 2009 07:30:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3745</guid>
		<description>Man kann den Code optimieren, indem man eine zusätzliche statische Variable mit diesem Code lädt und die entsprechenden Ausabefunktionen nur zulässt wenn die entsprechende statische Variable true ist.
&lt;pre lang=&quot;cpp&quot; line=&quot;1&quot;&gt;
bool IsDebuggerViewWaiting()
{
  if (IsDebuggerPresent())
    return true;
  else
  {
    HANDLE hFileMap = ::OpenFileMapping(FILE_MAP_READ, FALSE, _T(&quot;DBWIN_BUFFER&quot;));
    if (hFileMap)
    {
      ::CloseHandle(hFileMap);
      return true;
    }
    return false;
  }
}
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Man kann den Code optimieren, indem man eine zusätzliche statische Variable mit diesem Code lädt und die entsprechenden Ausabefunktionen nur zulässt wenn die entsprechende statische Variable true ist.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">&nbsp;
<span style="color: #0000ff;">bool</span> IsDebuggerViewWaiting<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>IsDebuggerPresent<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">else</span>
  <span style="color: #008000;">&#123;</span>
    HANDLE hFileMap <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">OpenFileMapping</span><span style="color: #008000;">&#40;</span>FILE_MAP_READ, FALSE, _T<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;DBWIN_BUFFER&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hFileMap<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
      <span style="color: #008080;">::</span><span style="color: #007788;">CloseHandle</span><span style="color: #008000;">&#40;</span>hFileMap<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
	</item>
	<item>
		<title>Von: Torsten</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3744</link>
		<dc:creator>Torsten</dc:creator>
		<pubDate>Wed, 12 Aug 2009 07:20:58 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3744</guid>
		<description>Ach wenn wir grad an kleinen Hilfsmakros sind ;)

&lt;pre lang=&quot;cpp&quot; line=&quot;1&quot;&gt;
//---------------------------------------------------------------------------------------------
// FIXMEs / TODOs / NOTE macros
//---------------------------------------------------------------------------------------------
#define _QUOTE(x) # x
#define QUOTE(x) _QUOTE(x)
#define __FILE__LINE__ __FILE__ &quot;(&quot; QUOTE(__LINE__) &quot;) : &quot;

#define NOTE( x )  message( x )
#define FILE_LINE  message( __FILE__LINE__ )

#define TODO( x )  message( __FILE__LINE__ &quot;\n&quot;           \
  &quot; ------------------------------------------------\n&quot; \
  &quot;&#124;  TODO :   &quot; #x &quot;\n&quot; \
  &quot; -------------------------------------------------\n&quot; )
#define FIXME( x )  message(  __FILE__LINE__ &quot;\n&quot;           \
  &quot; ------------------------------------------------\n&quot; \
  &quot;&#124;  FIXME :  &quot; #x &quot;\n&quot; \
  &quot; -------------------------------------------------\n&quot; )
#define todo( x )  message( __FILE__LINE__ &quot; TODO :   &quot; #x &quot;\n&quot; ) 
#define fixme( x ) message( __FILE__LINE__ &quot; FIXME:   &quot; #x &quot;\n&quot; ) 
&lt;/pre&gt;

Beispiel:

#pragma todo(&quot;sonderbehandlung ja/nein&quot;)

ergibt 
1&gt;DlgFz.cpp
1&gt;.\dlgs\DlgFz.cpp(604) :  TODO :   &quot;sonderbehandlung ja/nein&quot;

PS: falls ich code zeug falsch gemacht hab, bitte nacharbeiten ;)</description>
		<content:encoded><![CDATA[<p>Ach wenn wir grad an kleinen Hilfsmakros sind <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">&nbsp;
<span style="color: #666666;">//---------------------------------------------------------------------------------------------</span>
<span style="color: #666666;">// FIXMEs / TODOs / NOTE macros</span>
<span style="color: #666666;">//---------------------------------------------------------------------------------------------</span>
<span style="color: #339900;">#define _QUOTE(x) # x</span>
<span style="color: #339900;">#define QUOTE(x) _QUOTE(x)</span>
<span style="color: #339900;">#define __FILE__LINE__ __FILE__ &quot;(&quot; QUOTE(__LINE__) &quot;) : &quot;</span>
&nbsp;
<span style="color: #339900;">#define NOTE( x )  message( x )</span>
<span style="color: #339900;">#define FILE_LINE  message( __FILE__LINE__ )</span>
&nbsp;
<span style="color: #339900;">#define TODO( x )  message( __FILE__LINE__ &quot;\n&quot;           \
  &quot; ------------------------------------------------\n&quot; \
  &quot;|  TODO :   &quot; #x &quot;\n&quot; \
  &quot; -------------------------------------------------\n&quot; )</span>
<span style="color: #339900;">#define FIXME( x )  message(  __FILE__LINE__ &quot;\n&quot;           \
  &quot; ------------------------------------------------\n&quot; \
  &quot;|  FIXME :  &quot; #x &quot;\n&quot; \
  &quot; -------------------------------------------------\n&quot; )</span>
<span style="color: #339900;">#define todo( x )  message( __FILE__LINE__ &quot; TODO :   &quot; #x &quot;\n&quot; ) </span>
<span style="color: #339900;">#define fixme( x ) message( __FILE__LINE__ &quot; FIXME:   &quot; #x &quot;\n&quot; )</span></pre></td></tr></table></div>

<p>Beispiel:</p>
<p>#pragma todo(&#8220;sonderbehandlung ja/nein&#8221;)</p>
<p>ergibt<br />
1&gt;DlgFz.cpp<br />
1&gt;.\dlgs\DlgFz.cpp(604) :  TODO :   &#8220;sonderbehandlung ja/nein&#8221;</p>
<p>PS: falls ich code zeug falsch gemacht hab, bitte nacharbeiten <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Torsten</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3743</link>
		<dc:creator>Torsten</dc:creator>
		<pubDate>Wed, 12 Aug 2009 05:58:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3743</guid>
		<description>Dein DBWinMutex Vorschlag fand ich auch nicht so schlecht, allerdings bin ich eher der Typ der das dann lieber selber schreibt als irgendwas fertiges zu nehmen.
Das auch der Grund weshalb mein Zeug nach 10 Jahren auch so stark angewachsen ist. :)</description>
		<content:encoded><![CDATA[<p>Dein DBWinMutex Vorschlag fand ich auch nicht so schlecht, allerdings bin ich eher der Typ der das dann lieber selber schreibt als irgendwas fertiges zu nehmen.<br />
Das auch der Grund weshalb mein Zeug nach 10 Jahren auch so stark angewachsen ist. <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: edgar</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3742</link>
		<dc:creator>edgar</dc:creator>
		<pubDate>Tue, 11 Aug 2009 20:24:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3742</guid>
		<description>Richtig Torsten. Dein Alternativvorschlag kommt der Intention meines ersten posts schon sehr nahe.
Ich meinte einfach: Es fehlt noch etwas Optimierung. ;)</description>
		<content:encoded><![CDATA[<p>Richtig Torsten. Dein Alternativvorschlag kommt der Intention meines ersten posts schon sehr nahe.<br />
Ich meinte einfach: Es fehlt noch etwas Optimierung. <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Torsten Schröder</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3741</link>
		<dc:creator>Torsten Schröder</dc:creator>
		<pubDate>Tue, 11 Aug 2009 17:52:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3741</guid>
		<description>Das seh ich nich so edgar, das liese sich recht schnell per ifdef komplett aus dem Programm entfernen, und ein leeres define auf Trace wird wegoptimiert. Alternativ gänge auch ein zur Laufzeit gesetztes Bool, wenn man es ein-/ausschaltbar haben möchte.</description>
		<content:encoded><![CDATA[<p>Das seh ich nich so edgar, das liese sich recht schnell per ifdef komplett aus dem Programm entfernen, und ein leeres define auf Trace wird wegoptimiert. Alternativ gänge auch ein zur Laufzeit gesetztes Bool, wenn man es ein-/ausschaltbar haben möchte.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: edgar</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3740</link>
		<dc:creator>edgar</dc:creator>
		<pubDate>Tue, 11 Aug 2009 13:20:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3740</guid>
		<description>Nun Torsten, es wird ja erst in OutputDebugString() festgestellt,
ob überhaupt ein Trace gewünscht wird.
Die Codesequenz davor wird also immer ausgeführt, ob es notwendig ist oder nicht.</description>
		<content:encoded><![CDATA[<p>Nun Torsten, es wird ja erst in OutputDebugString() festgestellt,<br />
ob überhaupt ein Trace gewünscht wird.<br />
Die Codesequenz davor wird also immer ausgeführt, ob es notwendig ist oder nicht.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Torsten</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3738</link>
		<dc:creator>Torsten</dc:creator>
		<pubDate>Tue, 11 Aug 2009 05:47:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3738</guid>
		<description>Hm, Kurze Frage: Was hat _vsnprintf mit dem Debug Output zu tun?

Also nach meiner Meinung läuft das nicht langsamer, egal was ein oder ausgeschaltet ist.</description>
		<content:encoded><![CDATA[<p>Hm, Kurze Frage: Was hat _vsnprintf mit dem Debug Output zu tun?</p>
<p>Also nach meiner Meinung läuft das nicht langsamer, egal was ein oder ausgeschaltet ist.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: edgar</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3736</link>
		<dc:creator>edgar</dc:creator>
		<pubDate>Mon, 10 Aug 2009 15:12:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3736</guid>
		<description>Ja Martin, nettes Beispiel.
Das würde ich aber trotzdem so nicht benutzen wollen.
_vsnprintf() frisst zuviel(unnötige) performance bei abgeschaltetem debug output.

Da würde sich ein vorheriger Blick auf &quot;DBWinMutex&quot; lohnen. ;)</description>
		<content:encoded><![CDATA[<p>Ja Martin, nettes Beispiel.<br />
Das würde ich aber trotzdem so nicht benutzen wollen.<br />
_vsnprintf() frisst zuviel(unnötige) performance bei abgeschaltetem debug output.</p>
<p>Da würde sich ein vorheriger Blick auf &#8220;DBWinMutex&#8221; lohnen. <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Torsten</title>
		<link>http://blog.m-ri.de/index.php/2009/08/09/vs-tippstricks-einfache-ausgabe-mit-trace-auch-in-der-release-version/comment-page-1/#comment-3735</link>
		<dc:creator>Torsten</dc:creator>
		<pubDate>Mon, 10 Aug 2009 13:05:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.m-ri.de/?p=490#comment-3735</guid>
		<description>Jep. Vor Jahren schon geschrieben und läuft tadellos... 
Zweiter Tipp, man kann es auch noch erweitern und gleich in ein Logfile ausgeben. Dazu nutze ich es dann auch noch, dazu dann noch verschlüsselt und in einem eigenen Format, damit ich es dann später mit einem Programm mir einfach anzeigen und auch nach Nachrichten filtern kann. 

Das ganze läuft in einem extra Thread bei mir. Aus den eigentlichen Arbeitsthreads kommen alle Trace Sachen in meiner Log.dll an. Diese sammelt die Nachrichten und wenn Zeit ist, schreibt sie sie parallel mit raus. Damit verliert man recht wenig Zeit. 

Im Laufe der Jahre hat mich allerdings auch ein was immer mehr genervt. 
Nämlich das man es nicht wie einen Stream beschreiben kann und damit einfacher und C++ konformer in sein Programm mit einbauen kann. 

Irgendwann muss ich mir die Arbeit wohl mal noch machen und das alles noch einmal dahin mit umschreiben, so das man beides kann.</description>
		<content:encoded><![CDATA[<p>Jep. Vor Jahren schon geschrieben und läuft tadellos&#8230;<br />
Zweiter Tipp, man kann es auch noch erweitern und gleich in ein Logfile ausgeben. Dazu nutze ich es dann auch noch, dazu dann noch verschlüsselt und in einem eigenen Format, damit ich es dann später mit einem Programm mir einfach anzeigen und auch nach Nachrichten filtern kann. </p>
<p>Das ganze läuft in einem extra Thread bei mir. Aus den eigentlichen Arbeitsthreads kommen alle Trace Sachen in meiner Log.dll an. Diese sammelt die Nachrichten und wenn Zeit ist, schreibt sie sie parallel mit raus. Damit verliert man recht wenig Zeit. </p>
<p>Im Laufe der Jahre hat mich allerdings auch ein was immer mehr genervt.<br />
Nämlich das man es nicht wie einen Stream beschreiben kann und damit einfacher und C++ konformer in sein Programm mit einbauen kann. </p>
<p>Irgendwann muss ich mir die Arbeit wohl mal noch machen und das alles noch einmal dahin mit umschreiben, so das man beides kann.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

