Skip to main content

Assorted debugging facilities.

Project description

Assorted debugging facilities.

Latest release 20260602: Remove some stray debug.

If the environment variable $CS_DEBUG_BUILTINS is set to a comma separated list of names then the builtins module will be monkey patched with those names, enabling trite debug use of those names anywhere in the code provided this module has been imported somewhere.

Particularly, when debugging programmes which read data from the standard input (sys.stdin) it is helpful to monkey patch breakpoint with the function from this module, which attaches to /dev/tty for the duration of the breakpoint call.

The allowed names are the list cs.debug.__all__ and include:

  • X: cs.x.X
  • abrk: a decorator to call breakpoint() on logic errors such as AssertionError
  • breakpoint: a wrapper for the builtin breakpoint which attaches to /dev/tty
  • pformat: pprint.pformat
  • pprint: pprint.pprint
  • print: cs.upd.print
  • r: cs.lex.r
  • redirect_stdout: contextlib.redirect_stdout
  • s: cs.lex.s
  • stack_dump: dump current Thread's call stack
  • thread_dump dump the active Threads with their call stacks
  • trace: the @trace decorator $CS_DEBUG_BUILTINS can also be set to "1" to install all of __all__ in the builtins.

Short summary:

  • abrk: A decorator to intercept the specified exceptions (by default AssertionError, NameError, RuntimeError) and call breakpoint(). The breakpoint frame contains: - func: the wrapper function - func_a, func_kw: the function positional and keyword arguments.
  • breakpoint: Wrapper for buildins.breakpoint()which attaches/dev/ttyassys.stdinifsys.stdin` is not a tty.
  • print_obj: Call tabulate_obj(obj,label=label) and pass to cs.lex.printt().
  • stack_dump: Dump a stack trace to a logger.
  • tabulate_obj: Tabulate the contents of an object for display via cs.lex.printt().
  • thread_dump: Write thread identifiers and stack traces to the file fp.
  • TimingOutLock: A Lock replacement which times out, used for locating deadlock points.
  • trace: Decorator to report the call and return of a function.

Module contents:

  • abrk(*da, **dkw): A decorator to intercept the specified exceptions (by default AssertionError, NameError, RuntimeError) and call breakpoint(). The breakpoint frame contains:

    • func: the wrapper function
    • func_a, func_kw: the function positional and keyword arguments

    Examples:

    @abrk
    def broken_function(......):
    
    @property
    @abrk(exceptions=AttributeError)
    def broken_property(......):
    
  • breakpoint(*a, **kw): Wrapper for buildins.breakpoint()which attaches/dev/ttyassys.stdinifsys.stdin` is not a tty.

  • print_obj(obj, label=None): Call tabulate_obj(obj,label=label) and pass to cs.lex.printt().

  • stack_dump(stack=None, limit=None, logger=None, log_level=None): Dump a stack trace to a logger.

    Parameters:

    • stack: a stack list as returned by traceback.extract_stack. If missing or None, use the result of traceback.extract_stack(). If stack has a .tb_frame or .__traceback__ attribute, extract the stack from that (this covers traceback objects and exceptions).
    • limit: a limit to the number of stack entries to dump. If missing or None, dump all entries.
    • logger: a logger.Logger ducktype or the name of a logger. If missing or None, obtain a logger from logging.getLogger().
    • log_level: the logging level for the dump. If missing or None, use cs.logutils.loginfo.level.
  • tabulate_obj(obj, label=None, *, seen=None): Tabulate the contents of an object for display via cs.lex.printt().

  • thread_dump(Ts=None, fp=None): Write thread identifiers and stack traces to the file fp.

    Parameters:

    • Ts: the Threads to dump; if unspecified use threading.enumerate().
    • fp: the file to which to write; if unspecified use sys.stderr.
  • class TimingOutLock: A Lock replacement which times out, used for locating deadlock points.

  • trace(*da, **dkw): Decorator to report the call and return of a function.

    Decorator parameters:

    • call: trace the call, default True
    • retval: trace the return, default False
    • exception: trace raised exceptions, default True
    • use_pformat: present the return value using pformat instead of repr, default False
    • with_caller: include the caller if this function, default True
    • with_pfx: include the current Pfx prefix, default False

Release Log

Release 20260602: Remove some stray debug.

Release 20260526:

  • tabulate_obj: recursion checks, proper label default, several more changes.
  • New breakpoint wrapper to use /dev/tty if stdin is not a tty.
  • Move the builtins monkey patching to the bottom, drop the exclusion of breakpoint.

Release 20260403:

  • @trace: include the return type when printing the return value.
  • Drop trace_caller(), @trace does this already.
  • @trace: new verbose=False and breakpoint=False optional parameters providing a fuller CALL recitation and a breakpoint respectively.
  • New tabulate_obj() and print_obj() functions for nice printout of arbirary objects.

Release 20250728: @trace: several updates/improvements to the trace output.

Release 20250325:

  • stack_dump: stack may also be a traceback object or an exception.
  • stack_dump: move the logic to obtain the stack into cs.py.stack.frames().

Release 20241005:

  • New log_via_print(msg, *args[, file=stdout]) function to use cs.upd.print as a logging call.
  • @trace: new $CS_DEBUG_TRACE envvar which may be "print" or "warning" or "X".
  • New @abrk decorator to intercept AssertionError, NameError and RuntimeError and call breakpoint.

Release 20240630: Assorted updates.

Release 20240519: trace_caller: access frame.name instead of frame.funcname.

Release 20240423:

  • Support "import *" by populating all with X, r, s, TimingOutLock, thread_dump, stack_dump, trace.
  • @trace: include the elapsed time on the return/exception log message.

Release 20230613.1: Bugfix builtins monkey patch.

Release 20230613: Honour $CS_DEBUG_BUILTINS envvar to monkey patch the builtins module, constraints via a white list.

Release 20230610:

  • DebuggingRLock fixes.
  • Move @trace from cs.py.func to cs.debug.
  • Drop Lock and RLock alias factories - importers should just use the debugging lock classes directly.
  • Rename threading.Thread to threading_Thread.
  • Simplify the debugging lock classes.

Release 20221118: stack_dump: cope when cs.logutils.setup_logging not run yet.

Release 20211208: @trace moved to cs.pyfunc, other minor changes.

Release 20200318: Remove use of cs.obj.O, universally supplanted by types.SimpleNamespace.

Release 20181231:

  • New TimingOutLock for locating deadlock points, grew from debugging cs.vt.index.
  • Other minor changes.

Release 20171231:

  • Update imports for recentchanges.
  • New context manager TraceSuite to trace start and end of a code suite.

Release 20160918: selftest(): fix parameter ordering to match unittest.

Release 20160828: Update metadata with "install_requires" instead of "requires".

Release 20160827:

  • New openfiles() to return selected pathnames of open files via lsof(8).
  • New selftest() to invoke unittests with benefits.
  • DebugShell, a cmd.Cmd subclass for debugging - current use case calls this with self.dict in a test case tearDwon.
  • debug_object_shell: convenience wrapper for DebugShell to call it on an object's attributes.

Release 20150116: PyPI prep.

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

cs_debug-20260602.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

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

cs_debug-20260602-py2.py3-none-any.whl (13.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file cs_debug-20260602.tar.gz.

File metadata

  • Download URL: cs_debug-20260602.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for cs_debug-20260602.tar.gz
Algorithm Hash digest
SHA256 941d509983f8dd9e52e89d2108e011134d8c4865162adec1b340feec38640ee0
MD5 e1596193a06c3fe89d9310fdd62ea74c
BLAKE2b-256 56992405fbf9ec3be3d4d6ba679cb6a5ffc3b82b8d0aca9e47a06b2ba3af6e1c

See more details on using hashes here.

File details

Details for the file cs_debug-20260602-py2.py3-none-any.whl.

File metadata

  • Download URL: cs_debug-20260602-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for cs_debug-20260602-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 909f64072bd056fc597e69786d9c4ace6178b5c6eeed80b5184265655db1f910
MD5 e417d69af368eb57d67af4a7f413e14b
BLAKE2b-256 289a75cecdb8ae2d26fead7b04c61d09ba35ebc6821499b13f0b9fbb7814e08d

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