6.6.3 Dynamic Stack Usage Analysis

It is possible to measure the maximum amount of stack used by a task, by adding a switch to gnatbind, as:

$ gnatbind -u0 file

With this option, at each task termination, its stack usage is output on stderr. Note that this switch is not compatible with tools like Valgrind and DrMemory; they will report errors.

It is not always convenient to output the stack usage when the program is still running. Hence, it is possible to delay this output until program termination. for a given number of tasks specified as the argument of the -u option. For instance:

$ gnatbind -u100 file

will buffer the stack usage information of the first 100 tasks to terminate and output this info at program termination. Results are displayed in four columns:

Index | Task Name | Stack Size | Stack Usage

where:

By default the environment task stack, the stack that contains the main unit, is not processed. To enable processing of the environment task stack, the environment variable GNAT_STACK_LIMIT needs to be set to the maximum size of the environment task stack. This amount is given in kilobytes. For example:

$ set GNAT_STACK_LIMIT 1600

would specify to the analyzer that the environment task stack has a limit of 1.6 megabytes. Any stack usage beyond this will be ignored by the analysis.

The package GNAT.Task_Stack_Usage provides facilities to get stack-usage reports at run time. See its body for the details.