{"id":138,"date":"2007-10-18T20:12:10","date_gmt":"2007-10-18T18:12:10","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/18\/vs-tipps-tricks-insert-tracepoint-der-nette-helfer-beim-debuggen\/"},"modified":"2007-11-13T20:38:17","modified_gmt":"2007-11-13T19:38:17","slug":"vs-tipps-tricks-insert-tracepoint-der-nette-helfer-beim-debuggen","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/18\/vs-tipps-tricks-insert-tracepoint-der-nette-helfer-beim-debuggen\/","title":{"rendered":"VS-Tipps &#038; Tricks: Insert Tracepoint, der nette Helfer beim Debuggen"},"content":{"rendered":"<p><em>Breakpoints <\/em>kennt jeder, aber <em>Tracepoints<\/em>!?!<\/p>\n<p>Den Men\u00fcpunkt <em>Insert Tracepoint<\/em> findet man im Kontext Men\u00fc des Editors.<br \/>\nWer kennt das nicht? Man ist mitten in einer Debug-Session, aber man m\u00fcsste jetzt eine Variable beobachten, wie sie sich entwickelt. Manchmal ist es einfach ung\u00fcnstig einen Breakpoint zu stetzen, weil der Timing, Focus und manches andere \u00e4ndert. Zudem, <em>Breakpoints <\/em>sind lahm und die <em>F5<\/em>-Taste will man auch icht kaputt machen. Ein <em>TRACE <\/em>Statement w\u00e4re super. Aber jetzt den Code \u00e4ndern? Evtl. klappt das <em>Edit&amp;Continue <\/em>nicht oder man kann es nicht einrichten, weil man eine Release Version debuggt.<\/p>\n<p>Hier ist ein <em>Tracepoint <\/em>ideal. Er leistet das, was ein <em>TRACE <\/em>Statement auch leistet, nur ohne Code \u00c4nderung. Einfach <em>Insert Tracepoint <\/em>ausw\u00e4hlen und angeben was man gerne sehen m\u00f6chte.<br \/>\nz.B.: <em>$FUNCTION bReset={bResetClipRegion} bEmpty={bEmptyClipRect}<\/em><\/p>\n<p>Es stehen einige Makros zur Verf\u00fcgung, die direkt im Dialog erkl\u00e4rt werden.\u00a0Gigantisch n\u00fctzlich sind die Variablen <em>$FUNCTION , $CALLER<\/em>, und <em>$CALLSTACK<\/em>. Das geht auch mit Variablen, die sich im aktuellen Kontext befinden, wie in meinem Beispiel zu sehen. Einfach die Variablen in geschweifte Klammern setzten und das war es schon.<\/p>\n<p>Die Ausgabe erfolgt umgehend in der Debug-Ausgabe:<br \/>\n<em>RedirectEraseBkgndToParent(CWnd *, CDC *) bReset=true bEmpty=true<br \/>\nRedirectEraseBkgndToParent(CWnd *, CDC *) bReset=true bEmpty=true<br \/>\nRedirectEraseBkgndToParent(CWnd *, CDC *) bReset=true bEmpty=true<\/em><\/p>\n<p>Absolut super ist, dass man dazu noch nicht mal einen Breakpoint setzen muss. D.h. man kann w\u00e4hrend der Laufzeit einfach so einen <em>Tracepoint <\/em>setzen ohne gro\u00dfe Eingriffe in die Software.<\/p>\n<p>Und ganz ohne Probleme l\u00e4sst sich auch ein <em>Breakpoint <\/em>in einen <em>Tracepoint<\/em> umwandeln und umgekehrt. Bei den Eigenschaften eines <em>Breakpoints <\/em>im Kontextmen\u00fc kann man die Eigenschaft <em>When hit&#8230; <\/em>entsprechend bearbeiten. Nimmt man den Haken bei <em>Continue Execution <\/em>heraus, dann hat man einen normalen <em>Breakpoint<\/em>. Setzt man den Haken bei <em>Continue Execution, <\/em>so macht man aus einem <em>Breakpoint <\/em>einen <em>Tracepoint<\/em>, man muss nur noch eine entsprechende Nachricht nach Wunsch angeben, die in der Debug Ausgabe angezeigt werden soll.<\/p>\n<p>\u2757 Beachten muss man jedoch, dass die Performance schlechter ist als bei einem eingebauten TRACE. Denn ein Breakpoint wird ausgel\u00f6st und der Debugger \u00fcbernimmt kurzfristig die Kontrolle.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Breakpoints kennt jeder, aber Tracepoints!?! Den Men\u00fcpunkt Insert Tracepoint findet man im Kontext Men\u00fc des Editors. Wer kennt das nicht? Man ist mitten in einer Debug-Session, aber man m\u00fcsste jetzt eine Variable beobachten, wie sie sich entwickelt. Manchmal ist es einfach ung\u00fcnstig einen Breakpoint zu stetzen, weil der Timing, Focus und manches andere \u00e4ndert. Zudem, &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/10\/18\/vs-tipps-tricks-insert-tracepoint-der-nette-helfer-beim-debuggen\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eVS-Tipps &#038; Tricks: Insert Tracepoint, der nette Helfer beim Debuggen\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[11,3,31],"tags":[38,37],"class_list":["post-138","post","type-post","status-publish","format-standard","hentry","category-debugging","category-programmieren","category-vs-tipps-tricks","tag-debuggen","tag-vs-tippstricks"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/comments?post=138"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/138\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}