{"id":12487,"date":"2017-09-26T00:10:04","date_gmt":"2017-09-25T23:10:04","guid":{"rendered":"https:\/\/sysprogs.com\/w\/?p=12487"},"modified":"2017-09-26T01:05:47","modified_gmt":"2017-09-26T00:05:47","slug":"announcing-visualgdb-5-3-rc1","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/w\/announcing-visualgdb-5-3-rc1\/","title":{"rendered":"Announcing VisualGDB 5.3 RC1"},"content":{"rendered":"<p>Today we are proud to announce the release of VisualGDB 5.3\u00a0Release Candidate 1. This version\u00a0introduces\u00a0profiling and code coverage support for Linux projects, Linux Dynamic Analysis, advanced code annotation and\u00a0a few other improvements. In this post I will\u00a0give you an overview of the new features:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-prof.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12488\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-prof.png\" alt=\"01-prof\" width=\"537\" height=\"391\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-prof.png 537w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-prof-300x218.png 300w\" sizes=\"(max-width: 537px) 100vw, 537px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<h2>Linux Profiling<\/h2>\n<p>VisualGDB\u00a0is now fully integrated with <a href=\"http:\/\/valgrind.org\/\">Valgrind<\/a> &#8211;\u00a0a powerful Linux profiling tool. You can now easily\u00a0find\u00a0the critical paths of your program by simply selecting Analyze-&gt;Analyze Performance with VisualGDB:<\/p>\n<p><a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-profgui.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12489\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-profgui.png\" alt=\"02-profgui\" width=\"574\" height=\"434\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-profgui.png 574w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-profgui-300x227.png 300w\" sizes=\"(max-width: 574px) 100vw, 574px\" \/><\/a><\/p>\n<p>Profiling Linux projects looks very similar to profiling Embedded projects &#8211; VisualGDB will run\u00a0the program under profiler and create detailed report files showing the amount of instructions executed within each function or line of code:<\/p>\n<p><a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-tree.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12490\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-tree.png\" alt=\"03-tree\" width=\"759\" height=\"281\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-tree.png 759w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-tree-300x111.png 300w\" sizes=\"(max-width: 759px) 100vw, 759px\" \/><\/a><\/p>\n<p>If you are using Visual Studio 2013, 2015 or 2017, VisualGDB will show the\u00a0statistics like number of invocations, spent time and number of incoming\/outgoing calls on top of each function in your code:<\/p>\n<p><a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/04-annotate.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12491\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/04-annotate.png\" alt=\"04-annotate\" width=\"978\" height=\"395\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/04-annotate.png 978w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/04-annotate-300x121.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/04-annotate-768x310.png 768w\" sizes=\"(max-width: 978px) 100vw, 978px\" \/><\/a><\/p>\n<p>This lets you easily explore the\u00a0real call tree (including the virtual methods) without waiting\u00a0for the entire source code to be\u00a0indexed:<\/p>\n<p><a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/05-calls.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12492\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/05-calls.png\" alt=\"05-calls\" width=\"757\" height=\"403\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/05-calls.png 757w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/05-calls-300x160.png 300w\" sizes=\"(max-width: 757px) 100vw, 757px\" \/><\/a><\/p>\n<p>You can also enable per-line annotations and VisualGDB will show you how much time each line took to run and\u00a0which functions were called from that line:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/06-lines.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12493\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/06-lines.png\" alt=\"06-lines\" width=\"935\" height=\"399\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/06-lines.png 935w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/06-lines-300x128.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/06-lines-768x328.png 768w\" sizes=\"(max-width: 935px) 100vw, 935px\" \/><\/a><\/p>\n<p>The profiler also tracks incoming calls, so you can see the list of all functions that called a certain function during the profiling session (even if this happens across multiple shared libraries):<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/07-calls.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12494\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/07-calls.png\" alt=\"07-calls\" width=\"707\" height=\"417\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/07-calls.png 707w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/07-calls-300x177.png 300w\" sizes=\"(max-width: 707px) 100vw, 707px\" \/><\/a><\/p>\n<p>Then you can navigate the call tree to find the full call stack and\u00a0understand the context better.\u00a0VisualGDB\u00a0can distinguish invocations of the same\u00a0function from different\u00a0contexts and\u00a0will\u00a0show the times and callers lists accordingly:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/08-calledfrom.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12495\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/08-calledfrom.png\" alt=\"08-calledfrom\" width=\"1410\" height=\"700\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/08-calledfrom.png 1410w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/08-calledfrom-300x149.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/08-calledfrom-768x381.png 768w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/08-calledfrom-1024x508.png 1024w\" sizes=\"(max-width: 1410px) 100vw, 1410px\" \/><\/a><\/p>\n<p>If profiling the entire program run slows it down too much, VisualGDB lets you turn the profiling on and off dynamically. Start in the &#8220;Debug and get ready to profile&#8221; mode, then step to the critical part of your program and enable profiling. VisualGDB will handle the low-level Valgrind commands automatically and let you view the relevant results:<br \/>\n<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/09-live.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12496\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/09-live.png\" alt=\"09-live\" width=\"1402\" height=\"517\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/09-live.png 1402w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/09-live-300x111.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/09-live-768x283.png 768w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/09-live-1024x378.png 1024w\" sizes=\"(max-width: 1402px) 100vw, 1402px\" \/><\/a><\/p>\n<h2>Code Coverage<\/h2>\n<p>VisualGDB 5.3 RC1 also includes out-of-the-box support for code coverage.\u00a0Simply enable the &#8220;Generate\u00a0Code Coverage Reports&#8221; setting in your build settings and VisualGDB will automatically instrument your code for code coverage analysis with gcov:<br \/>\n<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-instr.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12498\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-instr.png\" alt=\"01-instr\" width=\"822\" height=\"558\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-instr.png 822w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-instr-300x204.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-instr-768x521.png 768w\" sizes=\"(max-width: 822px) 100vw, 822px\" \/><\/a><\/p>\n<p>Enable the &#8220;Build code coverage reports&#8221; option via VisualGDB Project Properties and VisualGDB will automatically locate, download and parse the coverage files\u00a0and present you with an easily searchable structured report:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-cov.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12499\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-cov.png\" alt=\"02-cov\" width=\"960\" height=\"610\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-cov.png 960w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-cov-300x191.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-cov-768x488.png 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><\/a><\/p>\n<p>The coverage reports let you see detailed per-function statistics (in blocks and lines)\u00a0and can quickly highlight the\u00a0lines that were never executed during your test run so you can easily\u00a0modify your tests to cover them:<\/p>\n<p><a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-covreport.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12500\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-covreport.png\" alt=\"03-covreport\" width=\"1179\" height=\"758\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-covreport.png 1179w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-covreport-300x193.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-covreport-768x494.png 768w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/03-covreport-1024x658.png 1024w\" sizes=\"(max-width: 1179px) 100vw, 1179px\" \/><\/a><\/p>\n<h2>Dynamic Analysis<\/h2>\n<p>We have also added support for detecting\u00a0run-time memory and threading problems by using the Valgrind dynamic analysis tools. Simply enable dynamic analysis via\u00a0VisualGDB Project Properties and you\u00a0run your program under debugger:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-analyze.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12501\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-analyze.png\" alt=\"01-analyze\" width=\"960\" height=\"610\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-analyze.png 960w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-analyze-300x191.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-analyze-768x488.png 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><\/a>VisualGDB will automatically configure Valgrind to detect the selected type of issues and will show you details on each issue when it is detected:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-break.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12502\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-break.png\" alt=\"02-break\" width=\"680\" height=\"550\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-break.png 680w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-break-300x243.png 300w\" sizes=\"(max-width: 680px) 100vw, 680px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Embedded Memory Explorer Improvements<\/h2>\n<p>If you are using Visual Studio 2013 or later, VisualGDB will now display function sizes and stack usage (not\u00a0recursively yet), directly in the code as long as the Embedded Memory Explorer window is active and the detailed\u00a0view is enabled:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-stats.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12503\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-stats.png\" alt=\"01-stats\" width=\"894\" height=\"651\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-stats.png 894w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-stats-300x218.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/01-stats-768x559.png 768w\" sizes=\"(max-width: 894px) 100vw, 894px\" \/><\/a><\/p>\n<p>It will also show the sizes and offsets of various struct members so you can\u00a0quickly troubleshoot\u00a0forgotten alignment attributes or unexpected sizes:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-eme.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12504\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-eme.png\" alt=\"02-eme\" width=\"893\" height=\"651\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-eme.png 893w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-eme-300x219.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/02-eme-768x560.png 768w\" sizes=\"(max-width: 893px) 100vw, 893px\" \/><\/a><\/p>\n<p>All information is taken from the actual ELF file, so it will 100% match the\u00a0behavior of your program, even if the IntelliSense configuration has some settings incorrect.<\/p>\n<h3>Other Small Improvements<\/h3>\n<p>We have added a few smaller improvements to various components of VisualGDB. E.g. Advanced CMake Projects\u00a0are now better integrated with TFS, automatic XMing launching is now more reliable and the toolchain selection GUI looks less confusing on high-contrast color schemes and the embedded chronometer will now display the time elapsed since last event directly in the code:<\/p>\n<p><a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/chrono-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12506\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/chrono-1.png\" alt=\"chrono\" width=\"544\" height=\"138\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/chrono-1.png 544w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2017\/09\/chrono-1-300x76.png 300w\" sizes=\"(max-width: 544px) 100vw, 544px\" \/><\/a><\/p>\n<h2>Try It Out<\/h2>\n<p>VisualGDB 5.3 RC1 is out. You can download it on <a href=\"http:\/\/visualgdb.com\/download\/\">this page<\/a> and don&#8217;t hesitate to send us your feedback via the <a href=\"https:\/\/sysprogs.com\/support\/\">support form<\/a> or <a href=\"https:\/\/sysprogs.com\/w\/forums\/forum\/visualgdb\/\">forum <\/a>so that we can make VisualGDB even better.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today we are proud to announce the release of VisualGDB 5.3\u00a0Release Candidate 1. This version\u00a0introduces\u00a0profiling and code coverage support for Linux projects, Linux Dynamic Analysis, advanced code annotation and\u00a0a few other improvements. In this post I will\u00a0give you an overview of the new features:<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[1],"tags":[422],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/12487"}],"collection":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/comments?post=12487"}],"version-history":[{"count":5,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/12487\/revisions"}],"predecessor-version":[{"id":12509,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/12487\/revisions\/12509"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/media?parent=12487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/categories?post=12487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/tags?post=12487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}