【问题标题】:How to debug a python script launched by a third party app如何调试由第三方应用程序启动的 python 脚本
【发布时间】:2021-03-02 02:31:01
【问题描述】:

我使用 Linux Eclipse (pydev) 作为 IDE 来开发由用 C++ 编写的应用程序启动的 python 脚本。我可以在 IDE 中毫无问题地调试 python 脚本,但环境不是真实的(C++ 程序通过标准输入/标准输出发送和接收消息,这是一个复杂的通信通道,我无法完全重现手动编写消息) .

到目前为止,我一直在使用日志消息进行调试(穷人的调试),但它变得太复杂了。当我在 PHP 中做类似的事情时,我可以让 xdebug 监听并在 Netbeans 中添加断点。非常整洁和容易。是否可以在 Python 3.X(使用 Eclipse 或其他 IDE)中做类似的事情?

注意:我知道有一个 Pydev / Attach to Process 功能,但它不起作用。总是无法附加。

注意 2:Python 3.7 中还有一个内置的“breakpoint()”,但它链接到调试器,如果同样失败,IDE 将永远无法获得控制权。

【问题讨论】:

  • 也许eclipse有python插件,不确定。我在 python 项目中使用jetbrains.com/pycharm 有很好的经验
  • @ofirule 如果 IDE 可以满足我的需要,我没有任何问题可以更改它:调试由另一个 APP 启动的脚本,而不是 IDE
  • 可以考虑使用debugpy github.com/microsoft/debugpy
  • @yoonghm 我需要 VSCode 才能使用它吗?是基于DBG的吗?因为如果它像基于 DBG 的 Eclipse 或 PyCharm,我认为我的 Linux 发行版也会有同样的问题

标签: python python-3.x eclipse debugging pydev


【解决方案1】:

经过一番研究,这是我发现的最佳选择。没有提供任何其他解决方案,我发布它以防万一有人遇到同样的问题。

Python 有一个集成的调试器:pdb。它作为一个模块工作,如果您没有窗口控件(即启动脚本),则不允许使用它。

为了解决这个问题,一些程序员创建了在 pdb 上添加层的模块。我已经尝试了一些,最简单且视觉上最有趣的是rpudb(但也可以看看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)。

【讨论】:

    【解决方案2】:

    我能够将 PyCharm 附加到正在运行的 python 进程并使用 PyCharm attach to process 使用断点

    我创建了一个执行 python 脚本的 bash 脚本,它应该与 C++ 一样工作

    【讨论】:

    • 安装 PyCharm 后出现同样的问题。这似乎是一个 GDB 错误。
    • 无,只是不工作。 IDE 永远无法获得控制权。日志中没有任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多