远程纯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)
请参阅#9 和 cpython#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)
1.3.0 (2019-03-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上发布。