{"id":8775,"date":"2016-08-11T23:32:59","date_gmt":"2016-08-11T22:32:59","guid":{"rendered":"https:\/\/sysprogs.com\/w\/?p=8775"},"modified":"2016-08-11T23:40:46","modified_gmt":"2016-08-11T22:40:46","slug":"clang-intellisense-improvements-in-visualgdb-5-2","status":"publish","type":"post","link":"https:\/\/sysprogs.com\/w\/clang-intellisense-improvements-in-visualgdb-5-2\/","title":{"rendered":"Clang IntelliSense improvements in VisualGDB 5.2"},"content":{"rendered":"<p>The upcoming VisualGDB 5.2\u00a0comes with several improvements to the\u00a0Clang IntelliSense engine that make the development experience easier and save time on common tasks. Let&#8217;s look at those in detail.<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/include-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8777\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/include-1.png\" alt=\"include\" width=\"787\" height=\"179\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/include-1.png 787w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/include-1-300x68.png 300w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/include-1-768x175.png 768w\" sizes=\"(max-width: 787px) 100vw, 787px\" \/><\/a><!--more--><\/p>\n<h2>Performance<\/h2>\n<p>First of all, we have radically improved the IntelliSense performance. In VisualGDB 5.1\u00a0the bottleneck of the Clang IntelliSense engine was\u00a0computing\u00a0the\u00a0references to\u00a0variables and functions. For\u00a0source files with many included headers that could take\u00a05 seconds or more, putting\u00a0code completion and other features on hold. In VisualGDB 5.2 we have\u00a0eliminated this bottleneck by making code completion\u00a0and reference analysis\u00a0independent. No matter how huge your project\u00a0is and how long it takes to\u00a0reparse the source files, code\u00a0completion will\u00a0not be interrupted by it.<\/p>\n<p>Another\u00a0unnecessarily slow feature in VisualGDB 5.1 was the highlighting of nearby references to a\u00a0variable. If you were actively editing the source\u00a0code,\u00a0each\u00a0time you wanted to see the local references to a variable,\u00a0it took some annoying seconds for huge projects\u00a0because VisualGDB had to reparse the source file.\u00a0VisualGDB 5.2\u00a0goes smarter about this by immediately showing the references discovered earlier\u00a0and updating them once the last version of the file is reparsed.<\/p>\n<h2>Automatic header file\u00a0discovery<\/h2>\n<p>Another\u00a0big\u00a0annoyance reported by our users was the need to manually\u00a0specify header search\u00a0paths\u00a0for imported\u00a0projects. While being straight-forward, it could easily take considerable time\u00a0and become annoying.\u00a0So in VisualGDB 5.2 we have decided to automate this. Each time\u00a0VisualGDB discovers\u00a0that some header files\u00a0are missing, it will automatically search the nearby directories for those files. If some files cannot be located, you will get a chance to pinpoint them manually or just tell VisualGDB to scan another directory recursively and locate them there:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/missing.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8778\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/missing.png\" alt=\"missing\" width=\"663\" height=\"267\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/missing.png 663w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/missing-300x121.png 300w\" sizes=\"(max-width: 663px) 100vw, 663px\" \/><\/a><\/p>\n<p>Once the directories have been located, you can add them to your project properties (and to IntelliSense properties) with on click of a mouse:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/addfiles.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8779\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/addfiles.png\" alt=\"addfiles\" width=\"663\" height=\"266\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/addfiles.png 663w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/addfiles-300x120.png 300w\" sizes=\"(max-width: 663px) 100vw, 663px\" \/><\/a><\/p>\n<p>If you are using\u00a0\u00a0GNU Make or CMake with VisualGDB-generated\u00a0make files, it will\u00a0insert the discovered directories there automatically,\u00a0saving you more time:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/debugmak.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8780\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/debugmak.png\" alt=\"debugmak\" width=\"660\" height=\"199\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/debugmak.png 660w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/debugmak-300x90.png 300w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/a><\/p>\n<h2>Header inclusion stack<\/h2>\n<p>Another annoyance when working with\u00a0complex C++ projects\u00a0could be\u00a0understanding the context of an error in a header file.\u00a0Sometimes the code just before the <strong>#include&lt;&gt;<\/strong> directive is responsible for the error, but finding it could be tricky if the file is included through a chain of other files.\u00a0In VisualGDB 5.2 we have added a\u00a0special popup that\u00a0shows the source file responsible for including the current\u00a0header file and allows navigating through the include chain with a few mouse clicks:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/stack.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8781\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/stack.png\" alt=\"stack\" width=\"595\" height=\"172\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/stack.png 595w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/stack-300x87.png 300w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/><\/a><\/p>\n<h2>Improved Find all References<\/h2>\n<p>We have also improved the Find Symbol Results\u00a0window. \u00a0In VisualGDB 5.2 it can\u00a0show variable assignments in a different color, distinguish references inside\u00a0preprocessor macros and it&#8217;s now based on the WPF technology, making it much more\u00a0responsive than the old window:<a href=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/refs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-8782\" src=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/refs.png\" alt=\"refs\" width=\"579\" height=\"419\" srcset=\"https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/refs.png 579w, https:\/\/sysprogs.com\/w\/wp-content\/uploads\/2016\/08\/refs-300x217.png 300w\" sizes=\"(max-width: 579px) 100vw, 579px\" \/><\/a><\/p>\n<h2>Download<\/h2>\n<p>You can download\u00a0the preview version of VisualGDB 5.2 on the <a href=\"http:\/\/visualgdb.com\/download\/\">download page<\/a> and explore the new features yourself. If you have any feedback on it, you are more then welcome to share\u00a0it via our <a href=\"http:\/\/sysprogs.com\/support\/\">support form<\/a>\u00a0or\u00a0send us an email.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The upcoming VisualGDB 5.2\u00a0comes with several improvements to the\u00a0Clang IntelliSense engine that make the development experience easier and save time on common tasks. Let&#8217;s look at those in detail.<\/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":[216],"_links":{"self":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/8775"}],"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=8775"}],"version-history":[{"count":11,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/8775\/revisions"}],"predecessor-version":[{"id":8793,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/posts\/8775\/revisions\/8793"}],"wp:attachment":[{"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/media?parent=8775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/categories?post=8775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sysprogs.com\/w\/wp-json\/wp\/v2\/tags?post=8775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}