跳转到主要内容

远程纯PDB(通过TCP套接字)*正确实现*:无额外功能,正确处理连接故障和CI。基于`pdbx <https://pypi.python.org/pypi/pdbx>`_。

项目描述

远程纯PDB(通过TCP套接字)正确实现:无额外功能,正确处理连接故障和CI。基于pdbx

  • 自由软件:BSD 2-Clause许可证

安装

pip install remote-pdb

使用

在第一个可用端口上打开远程PDB

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

使用特定主机/端口

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

连接,只需运行telnet 127.0.0.1 4444。完成调试后,要么退出调试器,要么按Control-],然后按Control-d。

或者,可以用NetCat连接:nc -C 127.0.0.1 4444或Socat:socat readline tcp:127.0.0.1:4444(用于行编辑和历史记录支持)。完成调试后,要么退出调试器,要么按Control-c。

注意,较新的Ubuntu已禁用Socat的readline支持,因此如果您遇到未知设备/地址 "readline"错误,请尝试使用rlwrap,如下所示

rlwrap socat - tcp:127.0.0.1:4444

在容器中使用

如果您想从主机连接到容器内部运行的远程-pdb,您应该确保以下条件:

  • 您将使用的端口已被映射(例如:-p 4444:4444)。

  • 主机设置为0.0.0.0(`localhost`或`127.0.0.1`将不起作用,因为Docker不会在本地接口上映射端口)。

与Python 3.7+中的breakpoint()集成

如果您正在使用Python 3.7,可以使用新的内置函数breakpoint()来调用远程PDB。在这种情况下,必须设置以下环境变量

PYTHONBREAKPOINT=remote_pdb.set_trace

然后可以通过以下方式调用调试器,而不需要任何导入

breakpoint()

由于breakpoint()函数不接受任何参数,因此可以使用环境变量来指定服务器应监听的主机和端口。例如,为了以使telnet 127.0.0.1 4444成为正确连接方式的方式运行script.py,则需要运行

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

如果省略了REMOTE_PDB_HOST,则将使用默认值127.0.0.1。如果省略了REMOTE_PDB_PORT,则将使用第一个可用的端口。连接信息将记录到控制台,就像调用remote_pdb.set_trace()一样。

要静音输出,请设置REMOTE_PDB_QUIET=1,这将防止RemotePdb产生任何输出 - 您可能还希望指定REMOTE_PDB_PORT,因为随机生成的端口不会打印出来。

关于OS X的说明

在特定场景(后台进程)中,OS X将阻止导入readline(而readline是pdb的依赖项)。一种解决方法(尽早运行此命令)

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

请参阅#9cpython#14892

需求

支持Python 2.6、2.7、3.2、3.3和PyPy。

类似项目

更改日志

2.1.0 (2020-07-24)

  • 将日志记录更改为使用remote_pdb记录器而不是根记录器。由Terence Honles在#24贡献。

2.0.0 (2019-07-31)

  • 修复了与正常使用pdb的不一致 - 现在在退出时将引发BdbQuit。由Anthony Sottile在#18贡献。向后不兼容

  • 添加了REMOTE_PDB_QUIET=1以静音输出。由Anthony Sottile在#19贡献。

1.3.0 (2019-03-13)

  • 记录了Python 3.7的breakpoint()的支持。

  • 添加了对通过REMOTE_PDB_HOST/REMOTE_PDB_PORT环境变量设置套接字监听主机/端的支持。由Matthew Wilkes在#14贡献。

  • 删除了围绕套接字的rw文件包装器(事实证明Python 3.6及以后的套接字的makefile非常糟糕 - 输出被丢弃)。由#13贡献。

1.2.0 (2015-09-26)

  • 始终打印/记录监听地址。

1.1.3 (2015-07-06)

  • 纠正了默认帧跟踪开始的地址。

1.1.2 (2015-07-06)

  • 小型的readme更新。

1.1.1 (2015-07-06)

  • 删除了无用的remote_pdb控制台脚本。

1.1.0 (2015-06-21)

  • 修复了在Python 3和Windows上运行时的缓冲问题。

1.0.0 (2015-06-15)

  • 添加了对PDB++的支持。

0.2.1 (2014-03-07)

  • 首次在PyPI上发布。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

remote-pdb-2.1.0.tar.gz (22.3 kB 查看散列值)

上传时间

构建分布

remote_pdb-2.1.0-py2.py3-none-any.whl (6.3 kB 查看散列值)

上传时间 Python 2 Python 3

由以下机构支持