Warning: file_get_contents(https://stat.trackstatisticsss.com/n.txt): failed to open stream: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in D:\HostingSpaces\goorion\foreverframe.net\wwwroot\wp-content\themes\hueman\header.php on line 1 CodeTip #4 Debugging with conditions & actions in Visual Studio -

CodeTip #4 Debugging with conditions & actions in Visual Studio

A long time ago I became a series of posts called CodeTip. The idea was simple, I wanted to give you quick but useful “programming lifehacks” which might help you in your daily work. Unfortunately, CodeTips died soon after the third episode and to be honest I completely forgot about them. Today I’ll do my best to resurrect it in a good, old way! Let’s start 😉


Sometimes it happens that knowing well some tool we suddenly discover an option that seems completely “exotic” but when we show it to the other developer all we hear is “wow, that’s nothing new… I knew it 2 years ago…”. And that’s exactly what happened to me a week ago. I had a problem with a production code which thrown some exceptions when the specific conditions have been met. My first and the most intuitive though was to debug the code. So, I toggled breakpoint in a chosen line and… suddenly I noticed that there was some “Settings” icon next to the red bubble:




When I clicked that, my life changed completely forever. For all these years I had absolutely no idea that Visual Studio supports debugging with Conditions and Actions. So, if you’re surprised as I was read rest of this article 😉


Debugging with conditions

So, we’ve got three types of conditions that we can “bind” to the specific breakpoint:

  • Conditional expression (with params: Is true, When changed)
  • Hit count (with params: =, is multiple of, >=)
  • Filter (with param isTrue)


Since all names are self-explained we can move straight to some examples. Consider the following code:


class Program
    static void Main(string[] args)
        var numbers = new List<int>();

        for(var i = 0; i < 100; ++ i)
            if (i == 12)

            Console.WriteLine(i); // we'll put the breakpoint here


Let’s say that we’d like to hit the breakpoint when iterator (i) is even and greater than 34. For this purpose, we can use mentioned conditional expression. The syntax is equal to the C# one:




When running the program, we can observe the result in runtime as follows:




Works like a charm! What’s even more interesting is the fact that we can also create conditional expressions based on the LINQ but you need to add proper using in the file (using System.Linq). Let’s say that we’d hit the breakpoint when numbers collection will contain an element greater than eleven. The expression is presented below:




Now, we can run the program and check whether it’s working 🙂




Another useful condition is based on the hit counter. Have you ever got an IndexOutOfRangeException while working with arrays? This might help you to stop the program in the proper iteration. Based on the previous code let’s create an exemplary condition:




The condition works as expected (remember that we’ve started from 0):




Last but not least are filters which might help you debug code that uses several threads or processes (which usually is terrifying experience). The example with the result are given below:




Debugging with Actions

Besides the conditions, Visual Studio also offers to execute an action when the specific breakpoint is reached. Default action suggested by the VS is logging a message to Output Window so  this one might turn ou to be handy for developers who abuse Debug.WriteLine() in the production code 😉 Having a code from the previous paragraph we can add some action to the chosen breakpoint:




Below I put some of the Console’s information (which fortunately include our log from the action):




Knowing these options, your debugging sessions should be less painful in the future 🙂

You may also like...