Valgrind Memcheck tracks all allocated heap blocks so it can find memory leaks when the program terminates.
The tool writes the leak details into the analysis results, which the IDE then parses
to display leak information.
Note:
All Valgrind tools can be loaded and run
from the command line.
However, using the IDE is more convenient because it automates much of the setup by setting Valgrind command options
based on UI fields and by copying the analysis results into the host workspace.
To find memory leaks with Valgrind Memcheck:
-
In the launch bar, expand the Launch Configuration dropdown (which is in the middle) and select the project
in which you want to check for leaks.
-
In the Launch Target dropdown (on the right), select the target for running your application.
-
In the Launch Mode dropdown (on the left), select Check.
-
Click the Edit button ()
on the right of the Launch Configuration dropdown.
-
In the configuration editor window, access the Valgrind controls by clicking the Check tab
on the right and then the Valgrind radio button near the top of this tab.
-
Select Memcheck from the Tool to run dropdown.
- Optional:
You can change any settings to customize what gets reported in the Valgrind results.
The Memcheck tab lets you
enable leak checking and the reporting of individual leak types (e.g., definite, possible).
-
Click OK to save the configuration changes and close the window.
-
In the launch bar, click the Check button
().
The IDE switches to the QNX Analysis perspective. If necessary, the IDE first builds the binary before uploading it
to the target. To analyze the application, the IDE instructs Valgrind to execute the uploaded binary with Memcheck
instrumentation. Then, it creates a new session for storing the Valgrind results; this session is displayed in the
Analysis Sessions view. When the program terminates, Valgrind writes the results to a log file,
which the IDE copies into the directory for the new session.
The memory error details are listed in the Valgrind view.
All error summaries contain the Valgrind icon () followed by a descriptive message and the PID of the Valgrind process.
On the left of the icon, you can click the arrow to display a stack trace of where the error was detected.
The depth of the displayed call chain is determined by the Callers in stack trace field in the
General Options tab.
For leaks, the error summary states the number of lost bytes and blocks as well as the leak type.
The stack trace shows where the memory was allocated:
The stack traces should include location information for lost blocks allocated within functions of shared libraries.
If you don't see this information, you must manually configure the loading of debug symbols.
If you double-click a trace line that has source file information, the IDE opens the source file at the indicated line.
This feature lets you quickly find where a lost block was allocated.
Note:
You can run multiple Valgrind sessions concurrently, using the same tool or different tools, on the same application or
different applications. Valgrind log files always contain the PIDs of the Valgrind processes, so their names are always
distinct.