Skip to main content

Remote vanilla PDB (over TCP sockets) *done right*: no extras, proper handling around connection failures and CI. Based on `pdbx <https://pypi.python.org/pypi/pdbx>`_.

Project description

Remote vanilla PDB (over TCP sockets) done right: no extras, proper handling around connection failures and CI. Based on pdbx.

  • Free software: BSD 2-Clause License

Installation

pip install remote-pdb

Usage

To open a remote PDB on first available port:

from remote_pdb import set_trace
set_trace() # you'll see the port number in the logs

To use some specific host/port:

from remote_pdb import RemotePdb
RemotePdb('127.0.0.1', 4444).set_trace()

To connect just run telnet 127.0.0.1 4444. When you are finished debugging, either exit the debugger, or press Control-], then Control-d.

Alternately, one can connect with NetCat: nc -C 127.0.0.1 4444 or Socat: socat readline tcp:127.0.0.1:4444 (for line editing and history support). When finished debugging, either exit the debugger, or press Control-c.

Integration with breakpoint() in Python 3.7+

If you are using Python 3.7 one can use the new breakpoint() built in to invoke remote PDB. In this case the following environment variable must be set:

PYTHONBREAKPOINT=remote_pdb.set_trace

The debugger can then be invoked as follows, without any imports:

breakpoint()

As the breakpoint() function does not take any arguments, environment variables can be used to specify the host and port that the server should listen to. For example, to run script.py in such a way as to make telnet 127.0.0.1 4444 the correct way of connecting, one would run:

PYTHONBREAKPOINT=remote_pdb.set_trace REMOTE_PDB_HOST=127.0.0.1 REMOTE_PDB_PORT=4444 python script.py

If REMOTE_PDB_HOST is omitted then a default value of 127.0.0.1 will be used. If REMOTE_PDB_PORT is omitted then the first available port will be used. The connection information will be logged to the console, as with calls to remote_pdb.set_trace().

To quiet the output, set REMOTE_PDB_QUIET=1, this will prevent RemotePdb from producing any output – you’ll probably want to specify REMOTE_PDB_PORT as well since the randomized port won’t be printed.

Note about OS X

In certain scenarios (backgrounded processes) OS X will prevent readline to be imported (and readline is a dependency of pdb). A workaround (run this early):

import signal
signal.signal(signal.SIGTTOU, signal.SIG_IGN)

See #9 and cpython#14892.

Requirements

Python 2.6, 2.7, 3.2, 3.3 and PyPy are supported.

Similar projects

Changelog

2.0.0 (2019-07-31)

  • Fixed inconsistency with normal use of pdb - BdbQuit will now be raised on quitting. Contributed by Anthony Sottile in #18. BACKWARDS INCOMPATIBLE.

  • Added REMOTE_PDB_QUIET=1 to silence output. Contributed by Anthony Sottile in #19.

1.3.0 (2019-03-13)

  • Documented support for Python 3.7’s breakpoint().

  • Added support for setting the socket listening host/port through the REMOTE_PDB_HOST/REMOTE_PDB_PORT environment variables. Contributed by Matthew Wilkes in #14.

  • Removed use of rw file wrappers around sockets (turns out socket’s makefile is very buggy in Python 3.6 and later - output is discarded). Contributed in #13.

1.2.0 (2015-09-26)

  • Always print/log listening address.

1.1.3 (2015-07-06)

  • Corrected the default frame tracing starts from.

1.1.2 (2015-07-06)

  • Small readme update.

1.1.1 (2015-07-06)

  • Remove bogus remote_pdb console script.

1.1.0 (2015-06-21)

  • Fixed buffering issues when running on Python 3 and Windows.

1.0.0 (2015-06-15)

  • Added support for PDB++.

0.2.1 (2014-03-07)

  • First release on PyPI.

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

remote-pdb-2.0.0.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

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

remote_pdb-2.0.0-py2.py3-none-any.whl (6.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file remote-pdb-2.0.0.tar.gz.

File metadata

  • Download URL: remote-pdb-2.0.0.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.8

File hashes

Hashes for remote-pdb-2.0.0.tar.gz
Algorithm Hash digest
SHA256 ad38f36f539b22be820f94062618366d5d3461115c1605b11679dba75f94ee62
MD5 534c7b19a7378de0ecb194f42f3d51b1
BLAKE2b-256 beded8923fb412117ea28a89751cb5712c68ad47326cbe15bdcf257022557f93

See more details on using hashes here.

File details

Details for the file remote_pdb-2.0.0-py2.py3-none-any.whl.

File metadata

  • Download URL: remote_pdb-2.0.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.8

File hashes

Hashes for remote_pdb-2.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2a1602ac1ec42e4c88da73c7221ca7f5a8559405b962eb0dbb2cdf413558b156
MD5 57beb4f6500de2696a900dbd94d634ee
BLAKE2b-256 724d976e45067b791c0012ee060ba615a95122ba4152dce2cf5d4f57847eef84

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