{"id":150,"date":"2007-11-16T19:49:19","date_gmt":"2007-11-16T18:49:19","guid":{"rendered":"http:\/\/blog.m-ri.de\/index.php\/2007\/11\/16\/vs-tipps-tricks-tracepoints-die-zweite\/"},"modified":"2007-11-17T10:03:05","modified_gmt":"2007-11-17T09:03:05","slug":"vs-tipps-tricks-tracepoints-die-zweite","status":"publish","type":"post","link":"http:\/\/blog.m-ri.de\/index.php\/2007\/11\/16\/vs-tipps-tricks-tracepoints-die-zweite\/","title":{"rendered":"VS-Tipps &#038; Tricks: Tracepoints die zweite&#8230;"},"content":{"rendered":"<p>In meinen ersten Artikel zu Tracepoints habe ich ja auch erw\u00e4hnt, dass man sehr einfach auch Variablen ausgeben kann. Das sch\u00f6ne ist, dass dies sofort auch f\u00fcr Iteratoren und manche andere Klasse funktioniert, ohne dass man spezielle Member angeben muss. Man setzt einfach die Variable in geschweifte Klammern. Und das d\u00fcrfen auch komplexe Ausdr\u00fccke sein, wie im Debug-Watch-Fenster.<\/p>\n<p>So f\u00fchrt die folgende Tracepoint Definition in einem meiner Programme:<\/p>\n<p class=\"ccode\">$FUNCTION, {iCountry,x} {s_countries[iCountry]}<\/p>\n<p>zu der folgenden Ausgabe:<\/p>\n<p class=\"ccode\">wmain(int, wchar_t * *, wchar_t * *), 1 {m_szISO3=0x00487e48 &#8222;AUT&#8220; m_szISO2=0x00487e44 &#8222;AT&#8220; m_szCountryCode=0x00487e40 &#8222;43&#8220; }<br \/>\nwmain(int, wchar_t * *, wchar_t * *), 2 {m_szISO3=0x00487e3c &#8222;AUS&#8220; m_szISO2=0x00487e38 &#8222;AU&#8220; m_szCountryCode=0x00487e34 &#8222;61&#8220; }<\/p>\n<p>Ein leider undokumentiertes Feature von Tracepoints ist jedoch, dass innerhalb der geschweiften Klammern auch die bekannten Formatierungen aus dem Debug-Watch-Fenster verwendet werden k\u00f6nnen. Wie hier zum Beispiel um die Ausgabe des Intergers in hexadezimal zu \u00e4ndern:\n<\/p>\n<p class=\"ccode\">$FUNCTION, {iCountry,x} {s_countries[iCountry]}<\/p>\n<p class=\"ccode\">wmain(int, wchar_t * *, wchar_t * *), 0x00000001 {m_szISO3=0x00487e48 &#8222;AUT&#8220; m_szISO2=0x00487e44 &#8222;AT&#8220; m_szCountryCode=0x00487e40 &#8222;43&#8220; }<br \/>\nwmain(int, wchar_t * *, wchar_t * *), 0x00000002 {m_szISO3=0x00487e3c &#8222;AUS&#8220; m_szISO2=0x00487e38 &#8222;AU&#8220; m_szCountryCode=0x00487e34 &#8222;61&#8220; }<\/p>\n<p>Besonders ist das interessant, wenn Fensterprozeduren tracen m\u00f6chte ohne das Trace-Tool oder Spy++ verwenden will und man die Formatspezifkation wm verwendet und alle Fensternachrichten im Klartext lesen kann. Oder man verwendet hr und sieht auch einen HRESULT nicht mehr nur als kryptische Zahl.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In meinen ersten Artikel zu Tracepoints habe ich ja auch erw\u00e4hnt, dass man sehr einfach auch Variablen ausgeben kann. Das sch\u00f6ne ist, dass dies sofort auch f\u00fcr Iteratoren und manche andere Klasse funktioniert, ohne dass man spezielle Member angeben muss. Man setzt einfach die Variable in geschweifte Klammern. Und das d\u00fcrfen auch komplexe Ausdr\u00fccke sein, &hellip; <a href=\"http:\/\/blog.m-ri.de\/index.php\/2007\/11\/16\/vs-tipps-tricks-tracepoints-die-zweite\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eVS-Tipps &#038; Tricks: Tracepoints die zweite&#8230;\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-150","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\/150","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=150"}],"version-history":[{"count":0,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.m-ri.de\/index.php\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}