Skip to main content

A containerized version of Valgrind for OSX.

Project description

macgrind

CI Stable version Latest version

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

macgrind-1.0.4.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

macgrind-1.0.4-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

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

Hashes for macgrind-1.0.4.tar.gz
Algorithm Hash digest
SHA256 32500a62dcf7c47005c988ac06878af2d135d294455c3dbba1c25d6c6f50b930
MD5 b160af9b73a4367d37c619fac54a09a7
BLAKE2b-256 a8257d02173802df2be8f4b48e3d4c559b7dfe4c91fd6ee36ca6e1c5e75e2089

See more details on using hashes here.

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

Hashes for macgrind-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 59e96359ab39f7d5f2aa382ae8a8b290de2e388b3b05880f368a53169ef78b4c
MD5 880ce8dfb82abc31e27c3b566452717a
BLAKE2b-256 807fa955b8076304dc14afe100ea41b17b8da78b6f2015aaca43d83f95f8ffaf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page