【问题标题】:PUDB Error: <no source code available>PUDB 错误:<没有可用的源代码>
【发布时间】:2018-08-08 21:13:10
【问题描述】:

我是 pudb 的新手。它在大多数情况下运行良好,但是当我尝试进入它显然无法识别的库时,我收到以下消息:

  <no source code available>                                                                                                                                                                                                                                                                                           
  If this is generated code and you would like the source code to show up here,
  add it to linecache.cache, like

  import linecache
  linecache.cache[filename] = (size, mtime, lines, fullname)

  You can also set the attribute _MODULE_SOURCE_CODE in the module in which this function
  was compiled to a string containing the code.

我尝试过导入“linecache”,而“cache”属性是一个字典。我已尝试为缺少的模块创建条目几次,但均未成功。

有人可以举一个更简单和/或实用的方法来将无法识别的模块添加到 pudb 的示例吗?

【问题讨论】:

  • “无法识别的模块”是什么意思?你能举个例子吗?
  • 就我而言,它是位于另一个目录中的模块 (Phidg​​etsPython/Phidg​​ets/Devices/InterfaceKit.py)。脚本导入模块没有问题,但是pudb显然看不到。我尝试将该目录添加到我的 PYTHONPATH,但它似乎没有帮助。

标签: python pudb


【解决方案1】:

它对我的工作方式如下。

我在执行一段即时生成的代码时收到此消息。我追踪了生成代码的位置,并补充道:

import linecache
linecache.cache[__file__] = (len(source), 0, source, __file__)

(其中source变量对应生成的源)

我观察到,在pudb交互模式下,堆栈列表中出现了一个新项目。这个新项目在引发&lt;no source code available&gt; 消息的项目之前。

当我浏览这个新项目时,我可以看到生成的源代码。

【讨论】:

  • 不是生成的代码怎么办?在使用 pudb 几年没有发生任何事故后,我第一次得到这个。没有生成任何代码。关于 Python3,我需要了解什么特别的信息吗?第一次调试 Py3 脚本。有趣的说明:我通常使用 set_trace() 策略性地定位,而不是使用“python3 -m pudb ...”进入调试器但是,当我这样做时,它会遇到 set_trace() 断点并且没有源。相反,如果我使用“-m pudb”进入调试器,然后点击继续,然后在 set_trace() 处停止,则会出现源代码。
【解决方案2】:

这个答案的灵感来自this GitHub issue。一种可能的解决方法是使用脚本的完整路径。

很简单,不要使用python script.py,而是使用python /full/path/to/script.py

这是可行的,因为某些库可能会使用 chdir 来更改目录,而当这种情况发生时,pudb 无法找到脚本,从而导致错误。

提示:要节省一些击键,您只需输入python $PWD/script.py 而不是输入完整路径。

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2011-03-30
    • 2016-01-29
    相关资源
    最近更新 更多