A containerized version of Valgrind for OSX.
Project description
macgrind
Containerized Valgrind on macOS for C and C++ projects.
why
As of the time of writing this, Valgrind is not natively supported on several recent versions of macOS. This tool allows you to run it in a Docker container without any code changes or extra garbage.
how to install
You can install macgrind
via pip
:
$ pip3 install macgrind
You also need to install Docker Desktop, and have it running.
how to use
You can use macgrind
by specifying the project's directory, and a target binary to run valgrind
on.
Please note that the target binary's path must be the one relative to the project path instead of the absolute one.
For example, say I have a C project with the following structure:
my_c_project/
src/
main.c
Makefile
I need to supply the full path to my_c_project/
, but only the relative path to the target executable: main
(and not
my_c_project/main
). The assumption here is that the all
target in the Makefile
builds my_c_project/main
.
So, we could run macgrind
like this:
$ macgrind my_c_project/ main
Creating temporary Dockerfile...
Building Docker image...
Running Docker container...
==========
Here's the output of the container:
==1== Memcheck, a memory error detector
==1== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==1== Command: /valgrind_project_tmp/main
==1==
Hello, World!
==1==
==1== HEAP SUMMARY:
==1== in use at exit: 0 bytes in 0 blocks
==1== total heap usage: 2 allocs, 2 frees, 4,196 bytes allocated
==1==
==1== All heap blocks were freed -- no leaks are possible
==1==
==1== For counts of detected and suppressed errors, rerun with: -v
==1== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Container exited without errors (exit code: 0)
Done!
By default, macgrind
will build a Docker image based on ubuntu:18.04
. It will then build your project by running
make all
in the project directory, then run the target using valgrind --leak-check=full --error-exitcode=1 <target>
.
more options
You can specify the image on which the container will be built by running macgrind
with the -i
(or --image
)
option:
$ macgrind my_c_project/ main --image ubuntu:16.04
Very often, projects depend on additional libraries. You can specify dependencies to be installed with apt-get
using
the -d
(or --dependencies
) option:
$ macgrind my_curl_c_project/ main --dependencies libcurl4-openssl-dev
If you wish to run a custom command to build your project or just one target, other than make all
, you can specify
it using the -c
(or --custom-command
) option. Be aware, as with the executable, the custom command must assume
a relative address, as it will be run inside of your project directory:
$ macgrind my_c_project/ main --custom-command "gcc src/main.c -o main"
To get the full option list, run:
$ macgrind --help
how it works
I've written a small blogpost about it.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file macgrind-1.0.4.tar.gz
.
File metadata
- Download URL: macgrind-1.0.4.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32500a62dcf7c47005c988ac06878af2d135d294455c3dbba1c25d6c6f50b930 |
|
MD5 | b160af9b73a4367d37c619fac54a09a7 |
|
BLAKE2b-256 | a8257d02173802df2be8f4b48e3d4c559b7dfe4c91fd6ee36ca6e1c5e75e2089 |
File details
Details for the file macgrind-1.0.4-py3-none-any.whl
.
File metadata
- Download URL: macgrind-1.0.4-py3-none-any.whl
- Upload date:
- Size: 18.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59e96359ab39f7d5f2aa382ae8a8b290de2e388b3b05880f368a53169ef78b4c |
|
MD5 | 880ce8dfb82abc31e27c3b566452717a |
|
BLAKE2b-256 | 807fa955b8076304dc14afe100ea41b17b8da78b6f2015aaca43d83f95f8ffaf |