Package: sdb
SdbA socket-based remote debugger for Python.  Based oncelery.contrib.rdb.UsageUse thesdblibrary to set remote breakpoints in any non-interactive or
background Python code and debug interactively over a telnet session:# some/python/code.pyclassSomeCode(object):defrun(self,**kwargs):# This will set a breakpoint and open an interactive Python# debugger exposed on a random port between 6899-6999.  The chosen# port will be reported as a warning## Remote Debugger:6900: Please telnet into 0.0.0.0 6900.## You can access it from your host machine using telnet:## $ telnet <hostname> <port>importsdbsdb.set_trace()Keep in mind that when you interactively debug in this way, any process
that encounters a breakpoint will wait until an active client is established
and concludes the debugging session with acontinuecommand.Automatically Connecting to BreakpointsTo simplify remote debugging session management, you can usesdb-listento automatically discover open remote debugging sessions and connect to them:$sdb-listenThis will open a Python process that listens for new debugger sessions and
automatically connects to them for you.  If your breakpoint is run on
anentirely different host(e.g.10.0.0.1) you can optionally specify the
hostname wheresdb-listenis running:importsdbsdb.Sdb(notify_host='10.0.0.1').set_trace()For OSX users, the Docker for Mac application relies on a separate virtual
machine running the containers. A unique hostname is advertised to containers
pointing back to the virtual machine called:docker.for.mac.host.internal.The breakpoint can then be configured to use that host so that it works
seamlessly in a Mac:importsdbsdb.Sdb(notify_host='docker.for.mac.host.internal').set_trace()Thesdb-listentool also includes support for tab-completion and history
tracking.Configuration with Environment VariablesIt is possible to set environment variables to configuresdb, which allows
to avoid remembering hosts and ports at the time of setting the breakpoints.SDB_HOST: Defaults to127.0.0.1and it is the address thatsdbshould
bind to.SDB_PORT: Defaults to6899, and it is the port used to bind (used withSDB_HOST). Note thatsdbhas a range of ports from6899to6999.SDB_NOTIFY_HOST: To advertise a different host, useful for a separate remote
host like in the case of Docker for Mac.SDB_CONTEXT_LINES: How much context should get printed when a breakpoint is
reached. Defaults to 60.SDB_COLORIZE: Toggle to enable or disable colorized output. Defaults to
enabled.Triggering sdb with a SignalIf you want to debug a running process without setting a specific breakpoint,
aset_trace()call can be triggered viaSIGTRAP:importsdbsdb.sigtrap()long_running_process()$kill-5<pid-of-process>This is particularly useful for investigating Python processes that appear to
be hung.Docker Compose ExamplesIf using Docker Compose, it is useful to open the range of ports thatsdbsupports, as well as injecting the environment variables to configure the
connection.For example:environment:-SDB_NOTIFY_HOST=docker.for.mac.host.internal-SDB_HOST=0.0.0.0-SDB_PORT=6899It is useful to define a range of ports thatsdbcan use:ports:-"6899-6999:6899-6999"Other Tipssdbsupports the same commands and aliases as Python'sdefault pdb implementation.sdbcolorizes output by default.  To disable this:importsdbsdb.Sdb(colorize=False).set_trace()sdbincludes a few additional debugger aliases that make interactive debugging more pleasant:Prefix commands with an integer to repeat them.  For example,10nis the same as runningnext10 times in a row.?is the same as callingdir()??can be added to the end of a function call to view its source lines e.g.,requests.post??might print:defpost(url,data=None,json=None,**kwargs):r"""Sends a POST request.:param url: URL for the new :class:`Request` object.:param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`.:param json: (optional) json data to send in the body of the :class:`Request`.:param \*\*kwargs: Optional arguments that ``request`` takes.:return: :class:`Response <Response>` object:rtype: requests.Response"""returnrequest('post',url,data=data,json=json,**kwargs)By default,sdbattempts to fill your entire console with debugger output (representing the current line position for the current frame).  You can adjust the height ofsdb's draw window with thelinescommand, e.g.,lines 15.