{"id":3393,"date":"2019-03-21T12:00:21","date_gmt":"2019-03-21T10:00:21","guid":{"rendered":"https:\/\/mariusbancila.ro\/blog\/?p=3393"},"modified":"2019-03-20T23:39:45","modified_gmt":"2019-03-20T21:39:45","slug":"three-productivity-features-in-the-vcpp-2017-debugger","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/","title":{"rendered":"Three productivity features in the Visual C++ 2017 debugger"},"content":{"rendered":"<p>Visual Studio 2017 has had a larger number of updates throughout its lifetime. At the time of writing this article, there have been ten major updates and countless minor ones. You can check the <a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/releasenotes\/vs2017-relnotes-history\" rel=\"noopener noreferrer\" target=\"_blank\">release notes history<\/a> for details. Part of the changes was in the debugger. In this article, I will mention three features for C++ development that were introduced at different stages in Visual Studio 2017.<\/p>\n<p><strong>Run to Click<\/strong> (<em>Available since 2017 15.0.<\/em>)<br \/>\nWhen you are in the debugger and you hover the cursor over a statement in the editor (or the Disassembly window) a green button appears. By clicking this button you resume the execution until that point. This functionality was already available either through a (temporary) breakpoint or by the Run to Cursor command. But with this contextual button, it is made much simpler.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.22.25.png\" alt=\"\" width=\"837\" height=\"297\" class=\"alignnone size-full wp-image-3394\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.22.25.png 837w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.22.25-300x106.png 300w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.22.25-768x273.png 768w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.22.25-700x248.png 700w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/p>\n<p>See more details: <a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/debugger\/navigating-through-code-with-the-debugger?view=vs-2017\" rel=\"noopener noreferrer\" target=\"_blank\">Navigating through code with the Visual Studio debugger<\/a> <\/p>\n<p><strong>Just my code<\/strong> (<em>Available since 2017 15.8.<\/em>)<br \/>\nThis is a feature that avoids stepping into frameworks, system, and other non-user code. This is available for other languages too, but for C++ it requires the <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/reference\/jmc?view=vs-2017\" target=\"_blank\" rel=\"noopener noreferrer\"><tt>\/JMC<\/tt><\/a> compiler switch (which is enabled by default for new projects). <\/p>\n<p>Here is an example. Suppose you are in the debugger at this line:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.04.png\" alt=\"\" width=\"692\" height=\"100\" class=\"alignnone size-full wp-image-3402\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.04.png 692w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.04-300x43.png 300w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/p>\n<p>Stepping into the function call, you expect to get here:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.47.png\" alt=\"\" width=\"802\" height=\"189\" class=\"alignnone size-full wp-image-3400\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.47.png 802w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.47-300x71.png 300w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.47-768x181.png 768w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.47-700x165.png 700w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/p>\n<p>This is exactly what you get with this feature enabled. Without it, however, the debugger used to step into standard library code, as shown below:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.46.png\" alt=\"\" width=\"865\" height=\"197\" class=\"alignnone size-full wp-image-3403\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.46.png 865w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.46-300x68.png 300w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.46-768x175.png 768w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.33.46-700x159.png 700w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.07.png\" alt=\"\" width=\"858\" height=\"261\" class=\"alignnone size-full wp-image-3404\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.07.png 858w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.07-300x91.png 300w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.07-768x234.png 768w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.34.07-700x213.png 700w\" sizes=\"auto, (max-width: 858px) 100vw, 858px\" \/><\/p>\n<p>This feature can be enabled from Tools > Options > Debugging > General by selecting <strong>Enable Just My Code<\/strong>. In Visual Studio 2019, this feature is enabled by default.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.26.25.png\" alt=\"\" width=\"741\" height=\"435\" class=\"alignnone size-full wp-image-3405\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.26.25.png 741w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.26.25-300x176.png 300w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.26.25-700x411.png 700w\" sizes=\"auto, (max-width: 741px) 100vw, 741px\" \/><\/p>\n<p>When using this feature, in order to have the code classified as user-code, the PDB for the image containing it must be available to the debugger. When debugging:<\/p>\n<ul>\n<li>Step Into (or F11) on non-user code steps over the code to the next line of user code and Step Out (or Shift+F11) on non-user code runs to the next line of user code.<\/li>\n<li>when there&#8217;s no more user code, debugging continues until it ends, hits another breakpoint, or throws an error.<\/li>\n<li>when breaking in non-user code stepping continues in the non-user code.<\/li>\n<li>when hitting an exception, it stops on the exception, whether it is in user or non-user code. User-unhandled options in the Exception Settings dialog box are ignored.<\/li>\n<\/ul>\n<p>You can customize what code should be considered non-user (it&#8217;s an opt-out feature) by creating a <em>*.natjmc<\/em> file (in the <em>%VsInstallDirectory%\\Common7\\Packages\\Debugger\\Visualizers<\/em> folder if you want to change the behavior for all users, or in the <em>%USERPROFILE%\\My Documents\\Visualizers<\/em> folder for a particular user). Here is an example, from Microsoft Docs, on how such a file may look like (for details on the format, you should read the documentation):<\/p>\n<pre class=\"lang:default decode:true \" >&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;NonUserCode xmlns=\"http:\/\/schemas.microsoft.com\/vstudio\/debugger\/jmc\/2015\"&gt;\r\n\r\n  &lt;!-- Modules --&gt;\r\n  &lt;Module Name=\"ModuleSpec\" \/&gt;\r\n  &lt;Module Name=\"ModuleSpec\" Company=\"CompanyName\" \/&gt;\r\n\r\n  &lt;!-- Files --&gt;\r\n  &lt;File Name=\"FileSpec\"\/&gt;\r\n\r\n  &lt;!-- Functions --&gt;\r\n  &lt;Function Name=\"FunctionSpec\" \/&gt;\r\n  &lt;Function Name=\"FunctionSpec\" Module =\"ModuleSpec\" \/&gt;\r\n  &lt;Function Name=\"FunctionSpec\" Module =\"ModuleSpec\" ExceptionImplementation=\"true\" \/&gt;\r\n\r\n&lt;\/NonUserCode&gt;<\/pre>\n<p>See more details: <a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/debugger\/just-my-code?view=vs-2017\" rel=\"noopener noreferrer\" target=\"_blank\">Debug only user code with Just My Code<\/a><\/p>\n<p><strong>Step back<\/strong> (<em>Available since 2017 15.9.<\/em>)<br \/>\nThis latest feature enables us to debug by returning to a previous point in time during the debugging without restarting the process. How is this done? Behind the scenes, the debugger uses PssCaptureSnapshot, a Windows API, to basically span a child process and take a snapshot of its memory. This is all hidden to the user, but when you step back, the debugging of the current process is actually stopped and the debugger is attached to one of these snapshot processes with access to its snapshot state (its entire virtual memory). When you return to live debugging, the debugger is reattached to the debugged process and proceeds in a normal manner. <\/p>\n<p>Snapshots are taken each time a breakpoint is hit and at each step event, but not sooner than 300ms since the last one. This is done to ensure performance remains reasonable.<\/p>\n<p>To make this work, you must first enable IntelliTrace Snapshots, from Tools > Options > IntelliTrace > General. (Notice that the following screenshots are taken in Visual Studio 2019 Preview, but they are basically the same in Visual Studio 2017.)<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.05.28.png\" alt=\"\" width=\"745\" height=\"436\" class=\"alignnone size-full wp-image-3410\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.05.28.png 745w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.05.28-300x176.png 300w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.05.28-700x410.png 700w\" sizes=\"auto, (max-width: 745px) 100vw, 745px\" \/><\/p>\n<p>With this enabled, the Diagnostics Tool window changes to enable you to take snapshots. You will also see the snapshots that are taken automatically and you will be able to go through them and see the values of your variables in the Auto, Local, or Watch window.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.11.31.png\" alt=\"\" width=\"308\" height=\"538\" class=\"alignnone size-full wp-image-3411\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.11.31.png 308w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.11.31-172x300.png 172w\" sizes=\"auto, (max-width: 308px) 100vw, 308px\" \/><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.12.44.png\" alt=\"\" width=\"306\" height=\"239\" class=\"alignnone size-full wp-image-3412\" srcset=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.12.44.png 306w, https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.12.44-300x234.png 300w\" sizes=\"auto, (max-width: 306px) 100vw, 306px\" \/><\/p>\n<p>You can also move back and forth through the snapshot history with the Step Backward and Step Forward commands from the debugging toolbar.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-14.13.09.png\" alt=\"\" width=\"269\" height=\"25\" class=\"alignnone size-full wp-image-3414\" \/><\/p>\n<p>See more details: <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/step-back-going-back-in-c-time\/\" rel=\"noopener noreferrer\" target=\"_blank\">Step Back \u2013 Going Back in C++ Time<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Visual Studio 2017 has had a larger number of updates throughout its lifetime. At the time of writing this article, there have been ten major updates and countless minor ones. You can check the release notes history for details. Part of the changes was in the debugger. In this article, I will mention three features &#8230; <a title=\"Three productivity features in the Visual C++ 2017 debugger\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/\" aria-label=\"Read more about Three productivity features in the Visual C++ 2017 debugger\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[7,10],"tags":[587,34,505,577],"class_list":["post-3393","post","type-post","status-publish","format-standard","hentry","category-c","category-visual-studio","tag-debugging","tag-vc","tag-vs2017","tag-vs2019"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"vc++,vs2017,vs2019,debugging\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Three productivity features in the Visual C++ 2017 debugger\" \/>\n\t\t<meta property=\"og:description\" content=\"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-03-21T10:00:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-03-20T21:39:45+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Three productivity features in the Visual C++ 2017 debugger\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#article\",\"name\":\"Three productivity features in the Visual C++ 2017 debugger\",\"headline\":\"Three productivity features in the Visual C++ 2017 debugger\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/Screenshot-2019-03-20-at-11.22.25.png\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#articleImage\",\"width\":837,\"height\":297},\"datePublished\":\"2019-03-21T12:00:21+02:00\",\"dateModified\":\"2019-03-20T23:39:45+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#webpage\"},\"articleSection\":\"C++, Visual Studio, debugging, VC++, VS2017, VS2019\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"name\":\"C++\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"position\":4,\"name\":\"C++\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#listItem\",\"name\":\"Three productivity features in the Visual C++ 2017 debugger\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#listItem\",\"position\":5,\"name\":\"Three productivity features in the Visual C++ 2017 debugger\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"name\":\"C++\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/\",\"name\":\"Three productivity features in the Visual C++ 2017 debugger\",\"description\":\"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2019\\\/03\\\/21\\\/three-productivity-features-in-the-vcpp-2017-debugger\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2019-03-21T12:00:21+02:00\",\"dateModified\":\"2019-03-20T23:39:45+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Three productivity features in the Visual C++ 2017 debugger","description":"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/","robots":"max-image-preview:large","keywords":"vc++,vs2017,vs2019,debugging","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#article","name":"Three productivity features in the Visual C++ 2017 debugger","headline":"Three productivity features in the Visual C++ 2017 debugger","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/mariusbancila.ro\/blog\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-20-at-11.22.25.png","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#articleImage","width":837,"height":297},"datePublished":"2019-03-21T12:00:21+02:00","dateModified":"2019-03-20T23:39:45+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#webpage"},"articleSection":"C++, Visual Studio, debugging, VC++, VS2017, VS2019"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","name":"C++"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","position":4,"name":"C++","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#listItem","name":"Three productivity features in the Visual C++ 2017 debugger"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#listItem","position":5,"name":"Three productivity features in the Visual C++ 2017 debugger","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","name":"C++"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/","name":"Three productivity features in the Visual C++ 2017 debugger","description":"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2019-03-21T12:00:21+02:00","dateModified":"2019-03-20T23:39:45+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"Three productivity features in the Visual C++ 2017 debugger","og:description":"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.","og:url":"https:\/\/mariusbancila.ro\/blog\/2019\/03\/21\/three-productivity-features-in-the-vcpp-2017-debugger\/","article:published_time":"2019-03-21T10:00:21+00:00","article:modified_time":"2019-03-20T21:39:45+00:00","twitter:card":"summary","twitter:title":"Three productivity features in the Visual C++ 2017 debugger","twitter:description":"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back."},"aioseo_meta_data":{"post_id":"3393","title":"Three productivity features in the Visual C++ 2017 debugger","description":"A walk through three new features of the VC++ 2017 debugger: run to click, just my code debugging, and step back.","keywords":[{"label":"VC++","value":"VC++"},{"label":"VS2017","value":"VS2017"},{"label":"VS2019","value":"VS2019"},{"label":"debugging","value":"debugging"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:03:35","updated":"2025-12-12 07:53:21","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"Visual Studio 2017 has had a larger number of updates throughout its lifetime. At the time of writing this article, there have been ten major updates and countless minor ones. You can check the release notes history for details. Part of the changes was in the debugger. In this article, I will mention three features&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">Visual Studio<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">Visual Studio<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">debugging<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">VC++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">VS2017<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">VS2019<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">debugging<\/span>","<span class=\"advgb-post-tax-term\">VC++<\/span>","<span class=\"advgb-post-tax-term\">VS2017<\/span>","<span class=\"advgb-post-tax-term\">VS2019<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 8 years ago","modified":"Updated 8 years ago"},"absolute_dates":{"created":"Posted on March 21, 2019","modified":"Updated on March 20, 2019"},"absolute_dates_time":{"created":"Posted on March 21, 2019 12:00 pm","modified":"Updated on March 20, 2019 11:39 pm"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-SJ","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/3393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=3393"}],"version-history":[{"count":12,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/3393\/revisions"}],"predecessor-version":[{"id":3416,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/3393\/revisions\/3416"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=3393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=3393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=3393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}