如何调试由第三方应用程序启动的 python 脚本
How to debug a python script launched by a third party app
我正在使用 Linux Eclipse (pydev) 作为 IDE 来开发 python 由用 C++ 编写的应用程序启动的脚本。我可以在 IDE 中毫无问题地调试 python 脚本,但环境不是真实的(C++ 程序通过 stdin/stdout 发送和接收消息,这是一个复杂的通信通道,我可以'完全重现手写消息)。
直到现在,我一直在使用日志消息进行调试(可怜的调试),但它变得太复杂了。当我在 PHP 中做类似的事情时,我可以让 xdebug 监听并在 Netbeans 中添加断点。非常整洁和容易。是否可以在 Python 3.X(使用 Eclipse 或其他 IDE)中做类似的事情?
注意:我知道有 Pydev / Attach to Process 功能,但它不起作用。总是无法附加。
注意 2:Python 3.7 中也有一个内置的“断点 ()”,但它链接到调试器,如果也失败,IDE 永远不会获得控制权。
我能够将 PyCharm 附加到 运行 python 进程并使用 PyCharm attach to process
使用断点
我创建了一个 bash 脚本来执行 python 脚本,应该与 C++ 一样工作
经过一番研究,这是我找到的最佳选择。没有提供任何其他解决方案,我 post 以防万一有人遇到同样的问题。
Python 有一个集成调试器:pdb。它作为一个模块工作,如果您没有 window 控件(即您启动脚本),则不允许使用它。
为了解决这个问题,一些编码人员创建了在 pdb 上添加一层的模块。我已经尝试了一些,最简单且仍然视觉有趣的是 rpudb (but have a look also to this).
要安装它:
pip3 install https://github.com/msbrogli/rpudb/archive/master.zip
(如果您使用 pip3 install rpudb 命令安装它,它将安装仅对 python 2 有效的旧版本)
然后,您只需添加一个导入和一个函数调用即可使用它:
import rpudb
.....
rpudb.set_trace('127.0.0.1', 4444)
.....
启动程序,它将在 set_trace 调用中停止。要对其进行调试(并继续),请打开一个终端并像这样启动一个 telnet:
telnet 127.0.0.1 4444
你将拥有一个可视化的调试器,不仅可以调试本地程序,还可以远程调试(只需更改IP)。
我正在使用 Linux Eclipse (pydev) 作为 IDE 来开发 python 由用 C++ 编写的应用程序启动的脚本。我可以在 IDE 中毫无问题地调试 python 脚本,但环境不是真实的(C++ 程序通过 stdin/stdout 发送和接收消息,这是一个复杂的通信通道,我可以'完全重现手写消息)。
直到现在,我一直在使用日志消息进行调试(可怜的调试),但它变得太复杂了。当我在 PHP 中做类似的事情时,我可以让 xdebug 监听并在 Netbeans 中添加断点。非常整洁和容易。是否可以在 Python 3.X(使用 Eclipse 或其他 IDE)中做类似的事情?
注意:我知道有 Pydev / Attach to Process 功能,但它不起作用。总是无法附加。
注意 2:Python 3.7 中也有一个内置的“断点 ()”,但它链接到调试器,如果也失败,IDE 永远不会获得控制权。
我能够将 PyCharm 附加到 运行 python 进程并使用 PyCharm attach to process
使用断点我创建了一个 bash 脚本来执行 python 脚本,应该与 C++ 一样工作
经过一番研究,这是我找到的最佳选择。没有提供任何其他解决方案,我 post 以防万一有人遇到同样的问题。
Python 有一个集成调试器:pdb。它作为一个模块工作,如果您没有 window 控件(即您启动脚本),则不允许使用它。
为了解决这个问题,一些编码人员创建了在 pdb 上添加一层的模块。我已经尝试了一些,最简单且仍然视觉有趣的是 rpudb (but have a look also to this).
要安装它:
pip3 install https://github.com/msbrogli/rpudb/archive/master.zip
(如果您使用 pip3 install rpudb 命令安装它,它将安装仅对 python 2 有效的旧版本)
然后,您只需添加一个导入和一个函数调用即可使用它:
import rpudb
.....
rpudb.set_trace('127.0.0.1', 4444)
.....
启动程序,它将在 set_trace 调用中停止。要对其进行调试(并继续),请打开一个终端并像这样启动一个 telnet:
telnet 127.0.0.1 4444
你将拥有一个可视化的调试器,不仅可以调试本地程序,还可以远程调试(只需更改IP)。