{"id":35229,"date":"2025-03-19T18:33:52","date_gmt":"2025-03-19T18:33:52","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=35229"},"modified":"2025-03-28T23:11:27","modified_gmt":"2025-03-28T23:11:27","slug":"cpp-dynamic-debugging-full-debuggability-for-optimized-builds","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/cpp-dynamic-debugging-full-debuggability-for-optimized-builds\/","title":{"rendered":"C++ Dynamic Debugging: Full Debuggability for Optimized Builds"},"content":{"rendered":"<p>Over the past 5 years, we\u2019ve had many incredible opportunities to engage with game developers. From AAA studios to indie developers, the passion for slashing iteration times is significant. Amidst all the fantastic feedback we&#8217;ve received for Visual Studio, one sentiment has rung loud and clear: a desire to debug optimized C++ code without sacrificing performance. Although game developers have voiced this need the loudest, we know that solving this issue will benefit many other C++ workflows. While we&#8217;ve consistently rolled out <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/unreal-engine-cpp-game-development-made-easy-visual-studio-2022\/\">many<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/partnering-with-the-coalition\/\">productivity<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/unreal-engine-cpp-game-development-made-easy-visual-studio-2022\/\">and<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/faster-cpp-source-code-indexing\/\">performance<\/a> <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/directly-edit-unreal-engine-projects-in-visual-studio-2022\/\">enhancements<\/a> <a href=\"https:\/\/developer.microsoft.com\/en-us\/games\/articles\/2024\/02\/a-year-of-game-development-improvements-in-visual-studio-2022\/\">over the years<\/a>, debugging optimized code has always been at the top of everyone&#8217;s wish list.<\/p>\n<h2>Current Issues with Debugging Optimized Code<\/h2>\n<p>Through our conversations with game developers, we\u2019ve heard about some common problems when debugging optimized code:<\/p>\n<ul>\n<li>Trying to inspect locals often yields the &#8220;Variable is optimized away&#8221; message in the watch window.<\/li>\n<li>Step-over and step-into don&#8217;t always step over, or into, the expected code paths.<\/li>\n<li>Losing time while iterating with #pragma optimize to try and undo optimizations, requiring a rebuild and restart of the debugger.<\/li>\n<\/ul>\n<p>Thanks to your feedback, the team has been hard at work to come up with a creative solution.<\/p>\n<h2>Announcing: C++ Dynamic Debugging<\/h2>\n<p>We are thrilled to announce that C++ Dynamic Debugging is now available as a <em>preview<\/em> feature exclusively with the MSVC toolset. This feature dynamically deoptimizes code that you set breakpoints on or step into, giving you the performance of optimized code with the debugging experience of unoptimized code.<\/p>\n<p>Try C++ Dynamic Debugging today in <strong>Visual Studio 2022 version 17.14 Preview 2<\/strong>.<\/p>\n<p><div  class=\"d-flex justify-content-left\"><a class=\"cta_button_link btn-primary mb-24\" href=\"http:\/\/aka.ms\/vspreview\" target=\"_blank\">Download<\/a><\/div><\/p>\n<p><figure id=\"attachment_35233\" aria-labelledby=\"figcaption_attachment_35233\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/before.png\"><img decoding=\"async\" class=\"size-full wp-image-35233\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/before.png\" alt=\"Image before\" width=\"481\" height=\"301\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/before.png 481w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/before-300x188.png 300w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a><figcaption id=\"figcaption_attachment_35233\" class=\"wp-caption-text\">Without C++ Dynamic Debugging<\/figcaption><\/figure><\/p>\n<p><figure id=\"attachment_35232\" aria-labelledby=\"figcaption_attachment_35232\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/after.png\"><img decoding=\"async\" class=\"size-full wp-image-35232\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/after.png\" alt=\"Image after\" width=\"508\" height=\"267\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/after.png 508w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/after-300x158.png 300w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/><\/a><figcaption id=\"figcaption_attachment_35232\" class=\"wp-caption-text\">With C++ Dynamic Debugging<\/figcaption><\/figure><\/p>\n<blockquote><p><i><span data-contrast=\"none\">\u201cThe new feature is exceptional. I now have reliable stepwise debugging, variable inspection, and program counter jumping without needing to recompile with pragma optimize.\u201d<\/span><\/i><\/p>\n<p>\u2013 Jess Kube, Principal Software Engineer, The Coalition<\/p>\n<p><i><span data-contrast=\"none\">Using it daily, the new feature improved my ability to debug and investigate quicker. I don\u2019t need to manually deoptimize my files anymore\u201d<\/span><\/i><\/p>\n<p>\u2013 Matthew Koch, Principal Software Engineer, Halo Studios<\/p>\n<p><i><span data-contrast=\"none\">\u201cWith the new feature, breakpoints in inlined functions will now be hit. Previously, I had to use a debug build or #pragma optimize and remember to remove it before code review\u201d<\/span><\/i><\/p>\n<p>\u2013 Keith Stockdale, Senior Software Engineer, Rare<\/p><\/blockquote>\n<h2>Getting Started with C++ Dynamic Debugging<\/h2>\n<p>You only need a few short clicks to turn on C++ Dynamic Debugging for your project. After activating these options, you must rebuild to start using C++ Dynamic Debugging.<\/p>\n<h3>MSBuild C++ Projects<\/h3>\n<p>To begin, change your configuration to Release mode. Next, right-click on your project and click on Properties to open the Configuration Properties menu. In this menu, click on <em>Advanced<\/em> &gt; <em>Use C++ Dynamic Debugging<\/em> &gt; <strong>Yes<\/strong>. Lastly, rebuild your project.<\/p>\n<p>Setting this property will turn off Whole Program Optimization.<\/p>\n<p><figure id=\"attachment_35235\" aria-labelledby=\"figcaption_attachment_35235\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/configproperties.png\"><img decoding=\"async\" class=\"size-full wp-image-35235\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/configproperties.png\" alt=\"screenshot of configuration properties activating C++ dynamic debugging\" width=\"624\" height=\"212\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/configproperties.png 624w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/configproperties-300x102.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><figcaption id=\"figcaption_attachment_35235\" class=\"wp-caption-text\">Configuration Properties<\/figcaption><\/figure><\/p>\n<h3>Other Build Systems<\/h3>\n<ul>\n<li>Pass the new <em>\/dynamicdeopt<\/em> switch to <em>cl.exe, lib.exe, and link.exe<\/em><\/li>\n<li>For Unreal Engine developers, UE 5.6 will support the <em>bDynamicDebugging<\/em> Windows platform flag.<\/li>\n<\/ul>\n<p>Please see <a href=\"https:\/\/aka.ms\/vcdd\">documentation<\/a> for more details.<\/p>\n<h2>System Requirements<\/h2>\n<ul>\n<li>Visual Studio 2022 Version 17.14 Preview 2<\/li>\n<li>MSVC Toolset 19.44<\/li>\n<li>X64 architecture<\/li>\n<li>Not compatible with LTCG, PGO, OPT-ICF flags<\/li>\n<\/ul>\n<h2>Using C++ Dynamic Debugging<\/h2>\n<p>Turning on C++ Dynamic Debugging and rebuilding unlocks familiar debugging patterns for optimized code without compromising on performance.<\/p>\n<h3>Breakpoints<\/h3>\n<p>Your breakpoints will get hit in deoptimized code. Look for the [Deoptimized] tag in the Call Stack window to know that you can view all your locals.<\/p>\n<h3>Conditional and Dependent Breakpoints<\/h3>\n<p>Set Conditional and Dependent Breakpoints as if the code was unoptimized;\u00a0you can add conditional breakpoints to variables that have been optimized away in your optimized binaries.<\/p>\n<h3>Stepping Actions<\/h3>\n<p>Step Over to the next line of your source code as if the code was unoptimized.<\/p>\n<p><figure id=\"attachment_35237\" aria-labelledby=\"figcaption_attachment_35237\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/step-over.png\"><img decoding=\"async\" class=\"size-full wp-image-35237\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/step-over.png\" alt=\"Image step over in visual studio\" width=\"235\" height=\"92\" \/><\/a><figcaption id=\"figcaption_attachment_35237\" class=\"wp-caption-text\">Stepping Actions<\/figcaption><\/figure><\/p>\n<p>Step In to any function, and those functions will be deoptimized as well. In addition, Step In will now step into <em>__forceinline<\/em> functions.<\/p>\n<p><figure id=\"attachment_35238\" aria-labelledby=\"figcaption_attachment_35238\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/forceinline.png\"><img decoding=\"async\" class=\"size-full wp-image-35238\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/forceinline.png\" alt=\"Image forceinline code in lyra sample project\" width=\"561\" height=\"114\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/forceinline.png 561w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/forceinline-300x61.png 300w\" sizes=\"(max-width: 561px) 100vw, 561px\" \/><\/a><figcaption id=\"figcaption_attachment_35238\" class=\"wp-caption-text\">Step Into __forceinline functions<\/figcaption><\/figure><\/p>\n<h3>Set Next Statement<\/h3>\n<p>Using Set Next Statement in a deoptimized frame works as if the code was unoptimized.<\/p>\n<p><figure id=\"attachment_35239\" aria-labelledby=\"figcaption_attachment_35239\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/set-next-statement.png\"><img decoding=\"async\" class=\"size-full wp-image-35239\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/set-next-statement.png\" alt=\"Image set next statement\" width=\"524\" height=\"172\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/set-next-statement.png 524w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/set-next-statement-300x98.png 300w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/a><figcaption id=\"figcaption_attachment_35239\" class=\"wp-caption-text\">Set Next Statement<\/figcaption><\/figure><\/p>\n<h3>Call Stack Window<\/h3>\n<p>In your Call Stack window, you will see that any frames that have been deoptimized will have a <em>[Deoptimized]<\/em> tag.<\/p>\n<p><figure id=\"attachment_35242\" aria-labelledby=\"figcaption_attachment_35242\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/call-stack-window.png\"><img decoding=\"async\" class=\"size-full wp-image-35242\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/call-stack-window.png\" alt=\"Image call stack window\" width=\"421\" height=\"179\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/call-stack-window.png 421w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/call-stack-window-300x128.png 300w\" sizes=\"(max-width: 421px) 100vw, 421px\" \/><\/a><figcaption id=\"figcaption_attachment_35242\" class=\"wp-caption-text\">Call Stack Window<\/figcaption><\/figure><\/p>\n<p>Visual Studio only deoptimizes the frame corresponding to your breakpoint or functions stepped into. Frames higher up in the call stack remain optimized for performance. You can select additional frames in the Call Stack window and click \u201c<em>Deoptimize on next entry<\/em>\u201d to deoptimize those functions when they are entered the next time.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptnextentry.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-35241\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptnextentry.png\" alt=\"Image deoptnextentry\" width=\"418\" height=\"184\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptnextentry.png 418w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptnextentry-300x132.png 300w\" sizes=\"(max-width: 418px) 100vw, 418px\" \/><\/a><\/p>\n<h3>Managing &#8220;Deoptimize on next entry&#8221; breakpoints<\/h3>\n<p>Breakpoints added through &#8220;<em>Deoptimize on next entry<\/em>&#8221; are listed in the Breakpoints window. You can export these Breakpoints for later use.\u00a0To return your application to full optimization, delete these breakpoints.<\/p>\n<p><figure id=\"attachment_35240\" aria-labelledby=\"figcaption_attachment_35240\" class=\"wp-caption aligncenter\" ><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptbps.png\"><img decoding=\"async\" class=\"size-full wp-image-35240\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptbps.png\" alt=\"Image deoptbps\" width=\"408\" height=\"224\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptbps.png 408w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2025\/03\/deoptbps-300x165.png 300w\" sizes=\"(max-width: 408px) 100vw, 408px\" \/><\/a><figcaption id=\"figcaption_attachment_35240\" class=\"wp-caption-text\">Deoptimized Breakpoints<\/figcaption><\/figure><\/p>\n<h2>Middleware Support<\/h2>\n<p>We have been working closely with our middleware partners to ensure that C++ Dynamic Debugging works with popular middleware tools.<\/p>\n<h3>Unreal Engine<\/h3>\n<p>In Unreal Engine version 5.6, Unreal Build Tool and Unreal Build Accelerator will support C++ Dynamic Debugging natively. To try the feature today, please manually apply the <a href=\"http:\/\/aka.ms\/vcdd_ue\">change<\/a>, temporarily disable Unreal Build Accelerator, and see our <a href=\"https:\/\/aka.ms\/vcdd\">documentation<\/a> for more details.<\/p>\n<h3>IncrediBuild<\/h3>\n<p>IncrediBuild 10.24 or later supports C++ Dynamic Debugging.<\/p>\n<h3>FastBuild<\/h3>\n<p>FastBuild support for C++ Dynamic Debugging is now available in the <em>dev<\/em> branch, please see this <a href=\"https:\/\/aka.ms\/vcdd_fastbuild\">Pull Request<\/a>. Official support will be available in the upcoming v1.15.<\/p>\n<h3>Xbox GDK<\/h3>\n<p>Out-of-the-box support for C++ Dynamic Debugging will be available in an April 2025 update. To try this feature today, please refer to the official GDK documentation.<\/p>\n<h2>Overhead Considerations<\/h2>\n<p>While using C++ Dynamic Debugging, it&#8217;s important to acknowledge the following considerations. Despite these overhead costs, we are confident that your overall iteration time will benefit significantly.<\/p>\n<h3>File Output Size<\/h3>\n<p>In our assessments, using a modified version of the Lyra Sample project, we observed a 2.4x increase in the build output size.<\/p>\n<h3>Build Time<\/h3>\n<h4>End-to-end Build Time<\/h4>\n<p>Depending on the project, we saw an increase in end-to-end build time ranging from 1.05x to 1.15x.<\/p>\n<h4>Iteration Build Time<\/h4>\n<p>For small and medium-sized binaries, the increase in iteration build time was less than 1.2x. For larger binaries, such as monolithic games, the increase was up to 1.8x.<\/p>\n<h4>Mitigations for Iteration Build Time<\/h4>\n<p>If the increase in iteration time is too burdensome for large binaries, you can try the undocumented \/d2DDTrimInlines compiler switch. This switch, subject-to-change and removal, reduces the iteration time overhead from 1.8x to 1.4x at the cost of increased end-to-end build time. The switch also removes the ability to step into small __forceinline\/inline functions.<\/p>\n<h2>Known Issues<\/h2>\n<p>By design:<\/p>\n<ul>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-unexpected-PDB-error-LI\/10873409\">Unexpected PDB error, LIMIT (12), check for insufficient disk space, invalid path, or insufficient privilege.<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-Stepping-in-disassembly\/10873413\">Stepping in disassembly window remains optimized.<\/a><\/li>\n<\/ul>\n<p>Fixed in Visual Studio 2022 17.4 Preview 3:<\/p>\n<ul>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-crash-with-memcmp-and-ot\/10873401\">Crash with memcmp and other intrinsic imports with \/MD<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-incorrect-emission-of-C4\/10873403\">Incorrect emission of C4714<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-Missing-feature-from-x86\/10873404\">Missing feature from x86_x64 compiler<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-Instrumentation-based-pr\/10873412\">Instrumentation-based profiling doesn&#8217;t work<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-Crash-stepping-past-C\/10873414\">Crash stepping past C++ exception catch handlers<\/a><\/li>\n<\/ul>\n<p>Active Issues:<\/p>\n<ul>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-Starting-the-debugger-wi\/10873416\">Starting the debugger with F10 or F11 keeps main() optimized<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-__ImageBase-is-0-when-de\/10873418\">ImageBase is 0 when debugging<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/DD-1714p2-bug:-Crash-stepping-into-__tr\/10873420\">Crash stepping into __try block that has access violation<\/a><\/li>\n<\/ul>\n<h2>Conclusion<\/h2>\n<p>Try C++ Dynamic Debugging today: Experience the benefits of debug builds and the speed of optimized builds.<\/p>\n<p><div  class=\"d-flex justify-content-left\"><a class=\"cta_button_link btn-primary mb-24\" href=\"http:\/\/aka.ms\/vspreview\" target=\"_blank\">Download<\/a><\/div><\/p>\n<p>C++ Dynamic Debugging is a <em>preview<\/em> feature. Thank you to everyone who gave us feedback on debugging optimized code. This feature would not have been possible without your feedback. We love to hear how much time this feature has saved you and how you\u2019re incorporating it into your workflow. Furthermore, we invite you to keep sending feedback so we can make C++ Dynamic Debugging even better. We truly appreciate your feedback and encourage you to keep sharing your thoughts and ideas with us through <a href=\"https:\/\/developercommunity.visualstudio.com\/\">Developer Community<\/a>, X (<a href=\"https:\/\/twitter.com\/visualc\">@VisualC<\/a>), or email at\u00a0<a href=\"mailto:visualcpp@microsoft.com?subject=C++%20Dynamic%20Debugging%20Feedback\">visualcpp@microsoft.com<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the past 5 years, we\u2019ve had many incredible opportunities to engage with game developers. From AAA studios to indie developers, the passion for slashing iteration times is significant. Amidst all the fantastic feedback we&#8217;ve received for Visual Studio, one sentiment has rung loud and clear: a desire to debug optimized C++ code without sacrificing [&hellip;]<\/p>\n","protected":false},"author":39811,"featured_media":35243,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,3927],"tags":[140,55,331,3952],"class_list":["post-35229","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","category-game-development","tag-c","tag-debugging","tag-game-development","tag-optimized-builds"],"acf":[],"blog_post_summary":"<p>Over the past 5 years, we\u2019ve had many incredible opportunities to engage with game developers. From AAA studios to indie developers, the passion for slashing iteration times is significant. Amidst all the fantastic feedback we&#8217;ve received for Visual Studio, one sentiment has rung loud and clear: a desire to debug optimized C++ code without sacrificing [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/35229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/39811"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=35229"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/35229\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35243"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=35229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=35229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=35229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}