Skip to main content

A Python debugging library for detailed code execution tracing

Project description

Spewer

CI codecov PyPI - Version

A Python debugging library for detailed code execution tracing. This library provides utilities for tracing Python code execution with detailed information about variables, function calls, and execution flow.

Features

  • Line-by-line execution tracing: See exactly which lines are being executed
  • Function/method call tracing: Trace only function and method calls without line details
  • Variable value inspection: View the values of variables at each execution step
  • Module filtering: Trace only specific modules or all modules
  • Context manager support: Use with with statements for automatic cleanup
  • Lightweight: Minimal overhead and dependencies

Note: Implemented to avoid using pdb manual effort. This is not going to replace pyinstrument, py-spy, and several other performance and profiling debugging tools. This is a simple tool just to counter manual effort of pdb, and it can go deep inside the dependency and print those traces in a basic format which can be done by pyinstrument and other profiling tools as well, but again this is targeting a basic pdb flaw of manual inspection. This is just an inspection tool.

Installation

From PyPI (when published)

pip install spewer

From source

git clone https://github.com/Agent-Hellboy/spewer.git
cd spewer
pip install -e .

Usage

Basic Usage

from spewer import spew, unspew

# Start tracing
spew(show_values=True)

# Your code here
def my_function():
    x = 10
    y = 20
    return x + y

result = my_function()

# Stop tracing
unspew()

Using Context Manager

from spewer import SpewContext

# Automatic start/stop of tracing
with SpewContext(show_values=True):
    def my_function():
        x = 10
        y = 20
        return x + y
    
    result = my_function()

Module-Specific Tracing

from spewer import spew, unspew

# Only trace specific modules
spew(trace_names=['my_module'], show_values=True)

# Your code here
import my_module
my_module.some_function()

unspew()

Tracing Without Variable Values

from spewer import SpewContext

# Trace execution without showing variable values
with SpewContext(show_values=False):
    def my_function():
        x = 10
        y = 20
        return x + y
    
    result = my_function()

Function-Only Tracing

from spewer import SpewContext

# Trace only function/method calls without line details
with SpewContext(functions_only=True, show_values=True):
    def my_function(x, y):
        result = x + y
        return result
    
    result = my_function(10, 20)

This will output:

__main__:15: my_function()
    args: x=10, y=20

API Reference

Functions

spew(trace_names=None, show_values=False, functions_only=False)

Install a trace hook which writes detailed logs about code execution.

Parameters:

  • trace_names (Optional[List[str]]): List of module names to trace. If None, traces all modules.
  • show_values (bool): Whether to show variable values during tracing.
  • functions_only (bool): Whether to trace only function/method calls instead of line-by-line execution.

unspew()

Remove the trace hook installed by spew().

Classes

Spewer(trace_names=None, show_values=True, functions_only=False)

A trace hook class that provides detailed debugging information.

Parameters:

  • trace_names (Optional[List[str]]): List of module names to trace. If None, traces all modules.
  • show_values (bool): Whether to show variable values during tracing.
  • functions_only (bool): Whether to trace only function/method calls instead of line-by-line execution.

SpewContext(trace_names=None, show_values=False, functions_only=False)

Context manager for automatic spew/unspew operations.

Parameters:

  • trace_names (Optional[List[str]]): List of module names to trace. If None, traces all modules.
  • show_values (bool): Whether to show variable values during tracing.
  • functions_only (bool): Whether to trace only function/method calls instead of line-by-line execution.

Example Output

When tracing with show_values=True, you'll see output like:

__main__:15: x = 10
    x=10
__main__:16: y = 20
    y=20
__main__:17: result = x + y
    x=10 y=20 result=30
__main__:18: print(f"Result: {result}")
    result=30

Notes

  • The library uses Python's sys.settrace() which can impact performance
  • Only one trace hook can be active at a time
  • The context manager automatically handles cleanup even if exceptions occur
  • Variable inspection works best with simple variable names (avoid complex expressions)

License

This library is based on the Gunicorn debug module released under the MIT license. The original Gunicorn debug module is Copyright (c) 2009-2024 Benoît Chesneau and Copyright (c) 2009-2015 Paul J. Davis.

Attribution

This project builds upon the excellent debugging utilities from the Gunicorn web server project. The core tracing functionality was adapted from Gunicorn's debug module, which provides robust execution tracing capabilities. We've enhanced the original implementation with:

  • Type hints for better IDE support
  • Context manager integration for automatic cleanup
  • Enhanced error handling for problematic objects
  • Improved documentation and examples
  • Modern Python packaging structure

The original Gunicorn debug module can be found at: https://github.com/benoitc/gunicorn/blob/master/gunicorn/debug.py

Future Enhancements: We plan to further enhance this library with additional features to improve usability, including more output formats, advanced filtering options, and better integration with existing debugging workflows.

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

spewer-0.1.1.tar.gz (10.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spewer-0.1.1-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file spewer-0.1.1.tar.gz.

File metadata

  • Download URL: spewer-0.1.1.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for spewer-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d2f3583a753b47de6a415de8f6beffcd0e912610f721e48bf4a6086b7d732335
MD5 82c9b4c59b1c637e244ca615563392f0
BLAKE2b-256 96d59d8926a93dfacf6e169fe5d758f96f32bf38e548b14d91b277930af6c4cc

See more details on using hashes here.

File details

Details for the file spewer-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: spewer-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for spewer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5a6b995e3f2c9a204adf58b2efa87a208341746e7cce70ef39a6e057aa4b36fe
MD5 4d74240b643f99f90bc07722f8997edb
BLAKE2b-256 1127b1e331ea1267731ddb944897543fce01a7418c9dfd77bfebc05e896d636c

See more details on using hashes here.

Supported by

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