Runtime Flow blog (Understanding a control flow in a running .NET application)

September 11, 2011

Runtime Flow v1.3.1 released

Filed under: Uncategorized — Sergey Vlasov @ 12:06 pm

Runtime Flow v1.3.1 released – added a .NET 4.0 portable edition executable with deeper call stack support, enabled Options during monitoring.

Download links: Visual Studio edition, Portable edition.

Advertisements

Call stack depth limits

Filed under: Uncategorized — Sergey Vlasov @ 10:47 am

When viewing deep function calls in the Runtime Flow window you may hit a WPF layout recursion limit. To illustrate this problem I created a very simple application:

    class Program
    {
        static void Main(string[] args)
        {
            f(1);
        }

        static void f(int i)
        {
            if (i < 500)
                f(i + 1);
        }
    }

In Runtime Flow portable you can open maximum 58 recursive calls:

Maximum supported stack depth in Runtime Flow .NET 3.5

Maximum supported stack depth in Runtime Flow .NET 3.5


If you try to see more calls you get the following error:
Layout recursion limit reached WPF error

Layout recursion limit reached WPF error

The same problem exists when you view monitoring results in Visual Studio 2008/2005. In .NET 4.0 the layout recursion limit is increased from 255 to 4096. So in Visual Studio 2010 you can view much deeper stacks (though not 1024 deep due to other limitations).

I’ve created an additional Runtime Flow portable binary built for .NET 4.0 to enable more deep stack investigations:

Runtime Flow portable binaries for .NET 3.5 and .NET 4.0

Runtime Flow portable binaries for .NET 3.5 and .NET 4.0

If you have .NET 4.0 installed on the machine, it is now recommended to use RuntimeFlowPortable.NET40.exe instead of RuntimeFlowPortable.NET35.exe. It supports stacks up to 285 function calls:

Maximum supported stack depth in Runtime Flow .NET 4.0

Maximum supported stack depth in Runtime Flow .NET 4.0

Download link: Runtime Flow portable edition v1.3.1.

September 7, 2011

Pause and resume monitoring

Filed under: Uncategorized — Sergey Vlasov @ 4:09 pm

I’ve added the ability to pause and resume monitoring. After you’ve started monitoring (with Run or Customized Run) and have executed a use case, you can press the Pause button on the Runtime Flow toolbar:

The Pause button on the Runtime Flow toolbar

The Pause button on the Runtime Flow toolbar

Pause stops all updates to the Runtime Flow and Runtime Summary windows and eliminates most of monitoring overhead (speeding up the monitored application and limiting memory consumption). In this mode you can browse collected events and execute tasks in your application not required monitoring.

When you are ready to run a next use case, press the Resume button:

The Resume button on the Runtime Flow toolbar

The Resume button on the Runtime Flow toolbar

Resume clears the Runtime Flow and Runtime Summary windows and resumes normal monitoring events processing.

The most common case to not collect monitoring data is to skip application startup. For convenience, I’ve added the Monitor application startup option:

Monitor application startup option

Monitor application startup option

With Monitor application startup unchecked, no flow data is collected until you click the Resume button. This is useful when monitoring complex apps with very big initialization routines that you are not interested in.

Download links for Runtime Flow v1.3.0: Visual Studio edition, Portable edition.

Create a free website or blog at WordPress.com.