cargo-valgrind
A cargo subcommand, that runs valgrind and collects its output in a helpful manner.
This command extends cargo with the capability to directly run valgrind
on any crate executable.
The output of valgrind is then used to mark the binary as pass/fail.
This command should not be necessary for ordinary Rust programs, especially if you are only using safe Rust code. But if you do FFI-related stuff (either by simply using a FFI-binding crate or because you are developing a safe wrapper for such FFI bindings) it may be really helpful to check, whether the memory usages across the FFI borders are correct.
Usage
A typical mistake would be:
use CString;
use c_char;
extern "C"
The memory of the variable string
will never be freed.
If you run cargo valgrind run
in your shell, it detects the leak:
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
Un-commenting the unsafe { CString::from_raw(ptr) };
re-takes the memory and frees it correctly.
cargo valgrind run
will compile the binary for you and won't detect a leak, since there is no leak anymore.
If you would like to pass flags to valgrind (for example to run an alternate subtool), you can set the VALGRINDFLAGS
environment variable to a space-delimited list of valid Valgrind options.
Note: users of cargo-valgrind
version 1.x should mind the changed command line.
Previously there was a cargo valgrind
subcommand, that replaced the cargo run
or cargo test
commands.
Now the command line is cargo valgrind <command>
, where <command>
can be any normal cargo subcommand.
Installation
Requirements
You need to have valgrind
installed and in the PATH
(you can test this by running valgrind --help
in your shell).
You'll also need to have cargo
installed and in the PATH
, but since this is a cargo subcommand, you will almost certainly have it already installed.
Install the binary
Run the following command to install from crates.io:
This will install the latest official released version.
If you want to use the latest changes, that were not yet published to crates.io
, you can install the binary from the git-repository like this:
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in cargo-valgrind
by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.