https://github.com/tzussman/valparse
Package to parse Valgrind XML output files
https://github.com/tzussman/valparse
parser valgrind xml
Last synced: 5 months ago
JSON representation
Package to parse Valgrind XML output files
- Host: GitHub
- URL: https://github.com/tzussman/valparse
- Owner: tzussman
- License: mit
- Created: 2022-03-25T05:51:54.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-12-15T08:53:41.000Z (6 months ago)
- Last Synced: 2025-12-18T07:26:09.629Z (6 months ago)
- Topics: parser, valgrind, xml
- Language: Python
- Homepage:
- Size: 140 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# *valparse,* a parser for Valgrind-generated XML files
[](https://pypi.org/project/valparse/)
[](https://github.com/tzussman/valparse)

[](https://github.com/tzussman/valparse/actions?query=workflow%3A%22Build+Status%22)
[](https://codecov.io/gh/tzussman/valparse)
[](https://tzussman.github.io/valparse)
*valparse* supports protocol version 4 with [*Memcheck*][memcheck] only, but can
be easily modified to support [*Helgrind*][helgrind] and other protocol tools.
[memcheck]: https://valgrind.org/docs/manual/mc-manual.html
[helgrind]: https://valgrind.org/docs/manual/hg-manual.html
## Installation
*valparse* can be insalled by running
```sh
pip install valparse
```
Anaconda hosting may be added in the future.
## About Valgrind `.xml` files
By default, [Valgrind][valgrind] output is printed to `stderr`. While readable,
Valgrind's unmodified output is not very easily parsable. However, output can be
generated in the form of XML code and redirected to a `.xml` file by running
Valgrind with the following options:
[valgrind]: https://valgrind.org/
```sh
valgrind --leak-check=full --xml=yes --xml-file= ./
```
Some examples of `.xml` files generated by Valgrind are included in the
`/examples` directory.
Valgrind does not support XML output for fd leaks as of version 3.18.1.
## Usage
Below is an example of basic `valparse` usage:
```py
import valparse
xml_file = valparse.Parser('./test.xml')
if xml_file.hasLeaks() or xml_file.hasErrors():
print("Leaks or errors found!")
```
## Features
- Error generation for nonexistent/incorrectly formatted TOPLEVEL tags
- Error generation for nonexistent/incorrectly formatted PROTOCOL tags
- Basic Valgrind output parsing
- Check for existence of errors or leaks
- Check for fatal signal
- Count errors and leaks *(if applicable)*
- Error and leak parsing *(if applicable)*
- Fatal signal parsing *(if applicable)*
- Optional user-friendly `.supp` file generation
### TOPLEVEL tags
*valparse* checks for the existence and correct formatting of the following
TOPLEVEL tags:
- protocolversion *(4)*
- protocoltool *(memcheck)*
### PROTOCOL tags
*valparse* checks for the existence and correct formatting of the following
PROTOCOL tags:
- preamble
- pid
- ppid
- tool
- args
- status
- suppcounts
*Note: Valgrind supplies an 'errorcounts' tag, but it seems largely unreliable.
We've decided to generate this information manually.*
### Basic Valgrind output parsing
The primary function of *valparse* is to generate usable content from Valgrind
output. *valparse* was created with our grading scripts in mind, so it counts
the number of errors, leaks, unique errors, unique leaks, and total bytes
leaked. *valparse* also checks for the presence of a fatal signal.
### `.supp` file generation
Within each `` tag, Valgrind supplies a `` tag that can be
used to make `.supp` files, but it's cryptic and requires direct editing. We've
assembled this information manually to make it more user-friendly, customizable,
and generally better. *valparse* supports the dynamic generation of `.supp`
files, which can be utilised when running Valgrind to suppress certain leaks or
errors. Files can be generated in write (default) or append mode, and users can
specify suppression names as well as `.supp` file names.