{"id":1724,"date":"2020-08-18T15:47:58","date_gmt":"2020-08-18T19:47:58","guid":{"rendered":"http:\/\/blog.wholetomato.com\/?p=1724"},"modified":"2026-04-27T08:15:43","modified_gmt":"2026-04-27T12:15:43","slug":"prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio","status":"publish","type":"post","link":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/","title":{"rendered":"Prevent debugger from stepping into unwanted functions in Visual Studio"},"content":{"rendered":"\r\n<p><b>TL;DR<\/b><\/p>\r\n<p><span style=\"font-weight: 400;\">Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d<\/span><\/p>\r\n<p><span style=\"font-weight: 400;\">For a faster and more flexible approach, Visual Assist\u2019s Step Filter lets you skip unwanted functions in real time during debugging. This keeps your focus on the actual problem, speeds up troubleshooting, and makes debugging far more efficient.<\/span><\/p>\r\n<p>When you&#8217;re in a debugging session, sometimes the debugger can visit a lot of trivial functions or code from third-party libraries. In Visual Studio and also in Visual Assist, there are ways to filter out call stack events so that you can focus just on the critical code path.<\/p>\r\n\r\n\r\n\r\n<p>Read on to find out how.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Background<\/h2>\r\n\r\n\r\n\r\n<p>As you may already know, step into, step over, and step out functions are essential while debugging. However, it would be very time consuming to visit all of the functions. Sometimes debugger might lead you to methods that are not important from your perspective.<\/p>\r\n\r\n\r\n\r\n<p>Let&#8217;s see an example:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">#include &lt;iostream&gt;\r\n#include &lt;string&gt;\r\n\r\nclass Param {\r\npublic:\r\n    Param(const std::string&amp; str, int val) : mStr(str), mVal(val) { }\r\n\r\n    std::string GetStrVal() const {\r\n        return mStr + \"...\" + std::to_string(mVal);\r\n    }\r\n\r\nprivate:\r\n    std::string mStr;\r\n    int mVal;\r\n};\r\n\r\nvoid CallBackFunction(Param p1, Param p2) {\r\n    std::cout &lt;&lt; p1.GetStrVal() &lt;&lt; \"\\n\";\r\n    std::cout &lt;&lt; p2.GetStrVal() &lt;&lt; \"\\n\";\r\n}\r\n\r\nint main() {\r\n    CallBackFunction({ \"Hello\", 1 }, { \"World\", 2 });\r\n}<\/pre>\r\n\r\n\r\n\r\n<p>In the above example you can find a simple code that creates a named integer parameter into a separate type: <code>Param<\/code>. When you run the code, it should output the following:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">Hello...1\r\nWorld...2<\/pre>\r\n\r\n\r\n\r\n<p>The problem is that we have an ellipsis <code>...<\/code> rather than the colon <code>:<\/code> that we wanted in the first place. You can run the debugger and see where this output comes from.<\/p>\r\n\r\n\r\n\r\n<p>Set a breakpoint at the line where <code>CallBackFunction<\/code> is called and then press <code>F11<\/code> to try to step into the function. Since the code is relatively simple, we can just step into every procedure and investigate the program flow. Where will the debugger go at the start? I see something like this (assuming you have <a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/debugger\/just-my-code?view=vs-2019\">&#8220;Just My Code&#8221;<\/a> disabled):<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1076\" height=\"158\" data-attachment-id=\"1727\" data-permalink=\"https:\/\/www.wholetomato.com\/blog\/strctor_dbg\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?fit=1076%2C158&amp;ssl=1\" data-orig-size=\"1076,158\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"strctor_dbg\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?fit=300%2C44&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?fit=1024%2C150&amp;ssl=1\" class=\"wp-image-1727\" src=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?resize=1076%2C158&#038;ssl=1\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?w=1076&amp;ssl=1 1076w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?resize=300%2C44&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?resize=1024%2C150&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?resize=768%2C113&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/strctor_dbg.png?resize=360%2C53&amp;ssl=1 360w\" sizes=\"auto, (max-width: 1076px) 100vw, 1076px\" data-recalc-dims=\"1\" \/><\/figure>\r\n\r\n\r\n\r\n<p>(Just My Code is available for C++ since Visual Studio 2017 15.8. See this post for more information: <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/announcing-jmc-stepping-in-visual-studio\/\">Announcing C++ Just My Code Stepping in Visual Studio | C++ Team Blog<\/a>.)<\/p>\r\n\r\n\r\n\r\n<p>In the above example, debugger goes to the next instruction after the breakpoint. In our case, it&#8217;s a constructor of <code>std::string<\/code>!<\/p>\r\n\r\n\r\n\r\n<p>While sometimes it might be interesting to look into the internals of the Standard Library, it&#8217;s probably not the best place to look for the solution to our problem with the string output.<\/p>\r\n\r\n\r\n\r\n<p>Imagine what happens if you have several parameters. When you want to step into a method, you&#8217;ll first need to visit all code related to the creation of the parameters. The whole process might be frustrating, and you would lose a lot of time before going into the target function. Of course, you might just set a breakpoint at the beginning of the destination code; this will skip all of the unwanted behavior. But there is a better option.<\/p>\r\n\r\n\r\n\r\n<p>What if you could control and filter out unwanted functions?<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Filtering in Visual Studio<\/h2>\r\n\r\n\r\n\r\n<p>Before VS 2012 it was relatively tricky to filter out the code. Usually, it involved playing with some registry values. Fortunately, since Visual Studio 2012, this useful feature has been much improved.<\/p>\r\n\r\n\r\n\r\n<p>All you need to do is edit the <code>default.natstepfilter<\/code> XML file. It&#8217;s usually located in:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">\/\/ VS 2015\r\nProgram Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Packages\\Debugger\\Visualizers\r\n\r\n\/\/ VS 2019:\r\nC:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Packages\\Debugger\\Visualizers<\/pre>\r\n\r\n\r\n\r\n<p>This is the same for VS 2015, and for VS 2013 and VS 2012.<\/p>\r\n\r\n\r\n\r\n<p>To add more functions that will be filtered out, you can use regex expressions:<\/p>\r\n\r\n\r\n\r\n<p>In our example, when we want to skip all the functions from the <code>std::<\/code> namespace, we can write the following:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">std\\:\\:.*  <\/pre>\r\n\r\n\r\n\r\n<p>and add this line to <code>default.natstepfilter<\/code>:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">&lt;Function&gt;\r\n    &lt;Name&gt;std\\:\\:.* &lt;\/Name&gt;\r\n    &lt;Action&gt;NoStepInto&lt;\/Action&gt;\r\n&lt;\/Function&gt;<\/pre>\r\n\r\n\r\n\r\n<p>Please note that the file might be blocked for writing. The file <code>default.natstepfilter<\/code> is loaded each time a debugger session starts.<\/p>\r\n\r\n\r\n\r\n<p>You can now set up the most common functions in your project that you don&#8217;t want to visit during debugging. Usually, those are trivial functions or from third-party code (std, boost?). Remember not to filter out too much!<\/p>\r\n\r\n\r\n\r\n<p>In the latest versions of Visual Studio, you can also benefit from &#8220;Just My Code&#8221;, which won&#8217;t enter code that is not &#8220;your&#8221; module. That means system calls, the Standard Library, ATL, MFC, and others. You can even set your third-party libraries.<\/p>\r\n\r\n\r\n\r\n<p>While each revision of Visual Studio makes it easier and easier to control the debugging flow, there&#8217;s an even faster and more straightforward solution.<\/p>\r\n\r\n\r\n\r\n<p>See below:<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Even more with Visual Assist<\/h2>\r\n\r\n\r\n\r\n<p>In Visual Assist, you have a separate window that allows you to see all debugger events and filter them during the debugging session!<\/p>\r\n\r\n\r\n\r\n<p>You can show it from <code>Visual Assist -&gt; Debug -&gt; VA Step Filter<\/code>. You also have to have debugger integration enabled (turned on by default).<\/p>\r\n\r\n\r\n\r\n<p>For our example, the first time I run a debugger and press F11, it will still step into the constructor of <code>std::string<\/code>. But the VA Step Filter window will show the following output:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"791\" height=\"383\" data-attachment-id=\"1728\" data-permalink=\"https:\/\/www.wholetomato.com\/blog\/vastepfilter_dgb\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?fit=791%2C383&amp;ssl=1\" data-orig-size=\"791,383\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"vastepfilter_dgb\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?fit=300%2C145&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?fit=791%2C383&amp;ssl=1\" class=\"wp-image-1728\" src=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?resize=791%2C383&#038;ssl=1\" alt=\"\" srcset=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?w=791&amp;ssl=1 791w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?resize=300%2C145&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?resize=768%2C372&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/vastepfilter_dgb.png?resize=360%2C174&amp;ssl=1 360w\" sizes=\"auto, (max-width: 791px) 100vw, 791px\" data-recalc-dims=\"1\" \/><\/figure>\r\n\r\n\r\n\r\n<p>As you can see in the Debug Events section, Visual Assist lists: breakpoints, step into, step out, and step over actions.<\/p>\r\n\r\n\r\n\r\n<p>I can now click on <code>std::string::basic_string...<\/code> and then the next time debugger enters the same event, it will skip it and move forward. In our case, it will step into the constructor of our <code>Param<\/code> class.<\/p>\r\n\r\n\r\n\r\n<p>By default, VA has several predefined filters for the shared Windows libraries. You can also control the filters on a global level (all projects) or per solution.<\/p>\r\n\r\n\r\n\r\n<p>What are the main advantages?<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>It&#8217;s more visual than text files and XML files you have to edit for native debugger settings.<\/li>\r\n<li>You can easily switch the event while you&#8217;re in a debugging session. In our case, I can enable it for the first argument evaluation for <code>CallBackfunction<\/code> but disable it for the second argument\u2014no need to restart the session.<\/li>\r\n<li>It has more control than &#8220;Just My Code&#8221; because sometimes you can skip an unwanted function from your application code. For one debugging session, you might want to get to the solution faster by skipping some places.<\/li>\r\n<li>You can control the filter per solution level.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Try it out and see more information on the separate page: <a href=\"https:\/\/docs.wholetomato.com\/default.asp?W506\">VA Step Filter<\/a><\/p>\r\n<p><span data-sheets-root=\"1\"><div class=\"actions\">\r\n\t<a href=\"https:\/\/www.wholetomato.com\/downloads?utm_content=blog-\" class=\"button primary\">Try Visual Assist<\/a>\r\n<\/div><\/span><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">References<\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><a href=\"https:\/\/blogs.msdn.microsoft.com\/andypennell\/2004\/02\/06\/how-to-not-step-into-functions-using-the-visual-c-debugger\/\">How to Not Step Into Functions using the Visual C++ Debugger<\/a><\/li>\r\n<li><a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/dn457346.aspx\">MSDN, Just My Code<\/a><\/li>\r\n<li><a href=\"https:\/\/docs.wholetomato.com\/default.asp?W506\">VA Step Filter &#8211; Visual Assist Documentation<\/a><\/li>\r\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/announcing-jmc-stepping-in-visual-studio\/\">Announcing C++ Just My Code Stepping in Visual Studio | C++ Team Blog<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.wholetomato.com\/downloads\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1140\" height=\"380\" data-attachment-id=\"1737\" data-permalink=\"https:\/\/www.wholetomato.com\/blog\/new-banners-wt-product-trial-july-2020_1200x400\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?fit=1200%2C400&amp;ssl=1\" data-orig-size=\"1200,400\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"new-banners-wt-product-trial-july-2020_1200x400\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?fit=300%2C100&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?fit=1024%2C341&amp;ssl=1\" class=\"wp-image-1737\" src=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?resize=1140%2C380&#038;ssl=1\" alt=\"Fly over the IDE Gaps\" srcset=\"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?w=1200&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?resize=300%2C100&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?resize=1024%2C341&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?resize=768%2C256&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/08\/new-banners-wt-product-trial-july-2020_1200x400.png?resize=360%2C120&amp;ssl=1 360w\" sizes=\"auto, (max-width: 1140px) 100vw, 1140px\" data-recalc-dims=\"1\" \/><\/a><\/figure>\r\n","protected":false},"excerpt":{"rendered":"<p>TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can&#8230;<\/p>\n","protected":false},"author":183830964,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0,"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[672],"tags":[1220730,70886,703915104],"class_list":["post-1724","post","type-post","status-publish","format-standard","hentry","category-tips-and-tricks","tag-debugger","tag-debugging","tag-unwanted-functions"],"jetpack_publicize_connections":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfpLS4-rO","aioseo_head":"\n\t\t<!-- All in One SEO Pro 4.9.6.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"Bartlomiej Filipek\"\/>\n\t<meta name=\"google-site-verification\" content=\"DtHrwoEjg0KG_fbuPSp5j_wNIf-g5hSh4EH6tZBoCIw\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 4.9.6.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Tomato Soup - Visual Assist Team Blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Prevent debugger from stepping into unwanted functions in Visual Studio - Tomato Soup\" \/>\n\t\t<meta property=\"og:description\" content=\"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-18T19:47:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-04-27T12:15:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wholetomatosoftware\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@visualassist\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Prevent debugger from stepping into unwanted functions in Visual Studio - Tomato Soup\" \/>\n\t\t<meta name=\"twitter:description\" content=\"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@visualassist\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/tips-and-tricks\\\/#listItem\",\"name\":\"Tips and Tricks\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/tips-and-tricks\\\/#listItem\",\"position\":2,\"name\":\"Tips and Tricks\",\"item\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/tips-and-tricks\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#listItem\",\"name\":\"Prevent debugger from stepping into unwanted functions in Visual Studio\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#listItem\",\"position\":3,\"name\":\"Prevent debugger from stepping into unwanted functions in Visual Studio\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/tips-and-tricks\\\/#listItem\",\"name\":\"Tips and Tricks\"}}]},{\"@type\":\"FAQPage\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#aioseo-faq-page-64c3bed9350d8\",\"name\":\"Prevent debugger from stepping into unwanted functions in Visual Studio\",\"description\":\"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \\u201cJust My Code.\\u201d For a faster and more flexible approach, Visual\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"How can I add filtering in Visual Studio?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Before VS 2012 it was relatively tricky to filter out the code. Usually, it involved playing with some registry values. Fortunately, since Visual Studio 2012, this useful feature has been much improved. All you need to do is edit the default.natstepfilter XML file. It's usually located in: \\\/\\\/ VS 2015 Program Files (x86)\\\\Microsoft Visual Studio 14.0\\\\Common7\\\\Packages\\\\Debugger\\\\Visualizers \\\/\\\/ VS 2019: C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\\\\2019\\\\Community\\\\Common7\\\\Packages\\\\Debugger\\\\Visualizers This is the same for VS 2015, and for VS 2013 and VS 2012.\"}}],\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#breadcrumblist\"}},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#organization\",\"name\":\"Tomato Soup\",\"description\":\"Visual Assist Team Blog\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/\",\"email\":\"info@wholetomato.com\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":0,\"maxValue\":100},\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.wholetomato.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/wt-logo.jpg?fit=400%2C400&ssl=1\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#organizationLogo\",\"width\":400,\"height\":400},\"image\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/wholetomatosoftware\",\"https:\\\/\\\/twitter.com\\\/visualassist\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/Wholetomatosoftware\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/whole-tomato-software\"]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/\",\"name\":\"Tomato Soup\",\"description\":\"Visual Assist Team Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Prevent debugger from stepping into unwanted functions in Visual Studio - Tomato Soup<\/title>\n\n","aioseo_head_json":{"title":"Prevent debugger from stepping into unwanted functions in Visual Studio - Tomato Soup","description":"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual","canonical_url":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"google-site-verification":"DtHrwoEjg0KG_fbuPSp5j_wNIf-g5hSh4EH6tZBoCIw","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.wholetomato.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/category\/tips-and-tricks\/#listItem","name":"Tips and Tricks"}},{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/category\/tips-and-tricks\/#listItem","position":2,"name":"Tips and Tricks","item":"https:\/\/www.wholetomato.com\/blog\/category\/tips-and-tricks\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#listItem","name":"Prevent debugger from stepping into unwanted functions in Visual Studio"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#listItem","position":3,"name":"Prevent debugger from stepping into unwanted functions in Visual Studio","previousItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/category\/tips-and-tricks\/#listItem","name":"Tips and Tricks"}}]},{"@type":"FAQPage","@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#aioseo-faq-page-64c3bed9350d8","name":"Prevent debugger from stepping into unwanted functions in Visual Studio","description":"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual","url":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/","mainEntity":[{"@type":"Question","name":"How can I add filtering in Visual Studio?","acceptedAnswer":{"@type":"Answer","text":"Before VS 2012 it was relatively tricky to filter out the code. Usually, it involved playing with some registry values. Fortunately, since Visual Studio 2012, this useful feature has been much improved. All you need to do is edit the default.natstepfilter XML file. It's usually located in: \/\/ VS 2015 Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Packages\\Debugger\\Visualizers \/\/ VS 2019: C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Packages\\Debugger\\Visualizers This is the same for VS 2015, and for VS 2013 and VS 2012."}},{"@type":"Question","name":"How can I add filtering in Visual Studio?","acceptedAnswer":{"@type":"Answer","text":"Before VS 2012 it was relatively tricky to filter out the code. Usually, it involved playing with some registry values. Fortunately, since Visual Studio 2012, this useful feature has been much improved. All you need to do is edit the default.natstepfilter XML file. It's usually located in: \/\/ VS 2015 Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Packages\\Debugger\\Visualizers \/\/ VS 2019: C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Packages\\Debugger\\Visualizers This is the same for VS 2015, and for VS 2013 and VS 2012."}}],"inLanguage":"en-US","breadcrumb":{"@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#breadcrumblist"}},{"@type":"Organization","@id":"https:\/\/www.wholetomato.com\/blog\/#organization","name":"Tomato Soup","description":"Visual Assist Team Blog","url":"https:\/\/www.wholetomato.com\/blog\/","email":"info@wholetomato.com","numberOfEmployees":{"@type":"QuantitativeValue","minValue":0,"maxValue":100},"logo":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/05\/wt-logo.jpg?fit=400%2C400&ssl=1","@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#organizationLogo","width":400,"height":400},"image":{"@id":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/wholetomatosoftware","https:\/\/twitter.com\/visualassist","https:\/\/www.youtube.com\/c\/Wholetomatosoftware","https:\/\/www.linkedin.com\/company\/whole-tomato-software"]},{"@type":"WebSite","@id":"https:\/\/www.wholetomato.com\/blog\/#website","url":"https:\/\/www.wholetomato.com\/blog\/","name":"Tomato Soup","description":"Visual Assist Team Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.wholetomato.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Tomato Soup - Visual Assist Team Blog","og:type":"article","og:title":"Prevent debugger from stepping into unwanted functions in Visual Studio - Tomato Soup","og:description":"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual","og:url":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/","article:published_time":"2020-08-18T19:47:58+00:00","article:modified_time":"2026-04-27T12:15:43+00:00","article:publisher":"https:\/\/www.facebook.com\/wholetomatosoftware","twitter:card":"summary_large_image","twitter:site":"@visualassist","twitter:title":"Prevent debugger from stepping into unwanted functions in Visual Studio - Tomato Soup","twitter:description":"TL;DR Debugging in Visual Studio can quickly turn into a maze when the debugger keeps stepping into irrelevant functions like standard library or third-party code. Instead of wasting time navigating through unnecessary calls, you can filter them out using built-in tools like natstepfilter or \u201cJust My Code.\u201d For a faster and more flexible approach, Visual","twitter:creator":"@visualassist"},"aioseo_meta_data":{"post_id":"1724","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"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":"","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":"BlogPosting","isEnabled":false},"graphs":[{"id":"#aioseo-faq-page-64c3bed9350d8","slug":"faq-page","graphName":"FAQPage","label":"FAQ Page","properties":{"type":"FAQPage","name":"#post_title","description":"#post_excerpt","questions":[{"question":"How can I add filtering in Visual Studio?","answer":"Before VS 2012 it was relatively tricky to filter out the code. Usually, it involved playing with some registry values. Fortunately, since Visual Studio 2012, this useful feature has been much improved. All you need to do is edit the default.natstepfilter XML file. It's usually located in: \/\/ VS 2015 Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Packages\\Debugger\\Visualizers \/\/ VS 2019: C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Packages\\Debugger\\Visualizers This is the same for VS 2015, and for VS 2013 and VS 2012."}]}}]},"schema_type":"WebPage","schema_type_options":"{\"article\":{\"articleType\":\"BlogPosting\"},\"course\":{\"name\":\"\",\"description\":\"\",\"provider\":\"\"},\"faq\":{\"pages\":[\"{\\\"question\\\":\\\"How can I add filtering in Visual Studio?\\\",\\\"answer\\\":\\\"Before VS 2012 it was relatively tricky to filter out the code. Usually, it involved playing with some registry values. Fortunately, since Visual Studio 2012, this useful feature has been much improved.\\\\n\\\\nAll you need to do is edit the default.natstepfilter XML file. It's usually located in:\\\\n\\\\n\\\\\\\/\\\\\\\/ VS 2015\\\\nProgram Files (x86)\\\\\\\\Microsoft Visual Studio 14.0\\\\\\\\Common7\\\\\\\\Packages\\\\\\\\Debugger\\\\\\\\Visualizers\\\\n\\\\n\\\\\\\/\\\\\\\/ VS 2019:\\\\nC:\\\\\\\\Program Files (x86)\\\\\\\\Microsoft Visual Studio\\\\\\\\2019\\\\\\\\Community\\\\\\\\Common7\\\\\\\\Packages\\\\\\\\Debugger\\\\\\\\Visualizers\\\\n\\\\nThis is the same for VS 2015, and for VS 2013 and VS 2012.\\\"}\"]},\"product\":{\"reviews\":[]},\"recipe\":{\"ingredients\":[],\"instructions\":[],\"keywords\":[]},\"software\":{\"reviews\":[],\"operatingSystems\":[]},\"webPage\":{\"webPageType\":\"FAQPage\"}}","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":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"open_ai":null,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2022-02-02 22:51:09","updated":"2026-04-29 07:04:07"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.wholetomato.com\/blog\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.wholetomato.com\/blog\/category\/tips-and-tricks\/\" title=\"Tips and Tricks\">Tips and Tricks<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tPrevent debugger from stepping into unwanted functions in Visual Studio\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.wholetomato.com\/blog"},{"label":"Tips and Tricks","link":"https:\/\/www.wholetomato.com\/blog\/category\/tips-and-tricks\/"},{"label":"Prevent debugger from stepping into unwanted functions in Visual Studio","link":"https:\/\/www.wholetomato.com\/blog\/prevent-debugger-from-stepping-into-unwanted-functions-in-visual-studio\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/1724","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/users\/183830964"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/comments?post=1724"}],"version-history":[{"count":12,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/1724\/revisions"}],"predecessor-version":[{"id":4843,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/1724\/revisions\/4843"}],"wp:attachment":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/media?parent=1724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/categories?post=1724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/tags?post=1724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}