HBehrens / puncover

Analyses C/C++ build output for code size, static variables, and stack usage
MIT License
432 stars 94 forks source link

puncover

Analyzes C/C++ binaries for code size, static variables and stack usages. It creates a report with disassembler and call-stack analysis per directory, file, or function.

Installation and Usage

Install with pip:

pip install puncover

Run it by passing the binary to analyze:

puncover --elf_file project.elf
...
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Open the link in your browser to view the analysis.

Running Tests Locally

Setup

To run the tests locally, you need to install the development dependencies:

  1. install pyenv: https://github.com/pyenv/pyenv

    curl https://pyenv.run | bash
  2. install all the python environments, using this bashism (this can take a few minutes):

    for _py in $(<.python-version ); do pyenv install ${_py}; done
  3. install the development dependencies:

    pip install -r requirements-dev.txt

Running Tests

Then you can run the tests with:

tox

or, to target only the current python on $PATH:

tox -e py

Publishing Release

Release Script

See release.sh for a script that automates the above steps. This example will work with the PyPi tokens (now required):

PUNCOVER_VERSION=0.3.5 TWINE_PASSWORD="<pypi token>" TWINE_USERNAME=__token__ ./release.sh

Manual Steps

Only for reference, the release script should take care of all of this.

Click to expand 1. Update the version in `puncover/__version__.py`. 2. Commit the version update: ```bash git add . && git commit -m "Bump version to x.y.z" ``` 3. Create an annotated tag: ```bash git tag -a {-m=,}x.y.z ``` 4. Push the commit and tag: ```bash git push && git push --tags ``` 5. Either wait for the GitHub Action to complete and download the release artifact for uploading: https://github.com/HBehrens/puncover/actions OR Build the package locally: `python setup.py sdist bdist_wheel` 6. Upload the package to PyPI: ```bash twine upload dist/* ``` 7. Create GitHub releases: - `gh release create --generate-notes x.y.z` - attach the artifacts to the release too: `gh release upload x.y.z dist/*`

Contributing

Contributions are welcome! Please open an issue or pull request on GitHub.