【问题标题】:Is it possible to modify python code while debugging? with Pydev, PDB, etc调试时是否可以修改python代码?使用 Pydev、PDB 等
【发布时间】:2014-10-27 08:35:50
【问题描述】:

假设我正在使用 Eclipse 的 PyDev 单步执行代码。

有没有办法在断点下添加一些新代码...在运行时/运行时修改代码?

【问题讨论】:

  • 好吧,你可以想出一些代码,例如,imp.reload 一个模块。如果您编写的代码主要是无状态响应(如 Web 框架),并且只希望下一个请求获取新代码,那很容易(事实上,许多框架,如 Flask,自动执行此操作)。如果您正在处理有状态的代码,则必须保留状态对象的弱字典以腌制-取消腌制所有内容。如果要影响当前的函数堆栈,则需要一个函数来重建帧。这一切都是可行的(至少在 CPython/PyPy 中)……但一点也不容易,而且可能是个坏主意。
  • 可能可以重新导入模块,但这将是一个比 OP 要求的更有限的机制。被4秒打败!

标签: python eclipse debugging pydev


【解决方案1】:

我在 github 上发现了一个有趣的项目:pyrasite

将代码注入正在运行的 Python 进程 http://pyrasite.com

【讨论】:

    【解决方案2】:

    在 PDB 中,您可以使用 p 来计算和打印表达式和 !执行语句:

    p expression
    
    Evaluate the expression in the current context and print its value.
    
    [!]statement
    
    Execute the (one-line) statement in the context of the current stack frame. The exclamation point can be omitted unless the first word of the statement resembles a debugger command. To set a global variable, you can prefix the assignment command with a global command on the same line, e.g.:
    
    (Pdb) global list_options; list_options = ['-l']
    (Pdb)
    

    文档:https://docs.python.org/2/library/pdb.html

    至于如何在 PyDev 中做到这一点,我不使用 PyDev,所以我不太确定;但是这个功能应该对任何基于 BDB 的调试器都可用(我相信 PyDev 也是基于 BDB 的?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2015-12-29
      • 2013-02-08
      • 1970-01-01
      • 2020-06-20
      • 2022-10-06
      相关资源
      最近更新 更多