python - 使用pdb调试时可以查看python内置函数的源代码吗?

标签 python python-2.7 debugging pdb built-in

如何检查 python 内置函数的代码,例如进入 sum()

https://docs.python.org/2/library/functions.html#sum .

我希望看到 sum() 使用下面的代码和 pdb 中的 s 命令做了什么:

import pdb
def adder(nums):
  x = sum(nums)
  return x

pdb.set_trace()
print adder([1, 2, 3,4])

最佳答案

一些 Python 模块是用 C 语言编写的(以提高性能),无法在 pdb 中单步执行。如果您真的想看看这些函数中发生了什么,这是可能的,但并非微不足道。为了检查 C 函数,我通常使用 GNU 调试器 (GDB) 并在启用调试符号的情况下编译 Python。

  1. 下载位于 https://www.python.org/downloads/ 的 Python 源代码

  2. 解压 Python 源代码 | tar xzvf Python-2.7.6.tar.gz

  3. 进入解压后的目录并使用 | 运行配置脚本./configure

  4. 使用调试符号编译 | make -g

  5. 使用 GNU 调试器启动自定义编译调试 Python | gdb ./python

  6. 在 GDB 中为 sum() 调用设置断点 | b bltinmodule.c:builtin_sum.

  7. 从 GDB 运行您的脚本(我调用了我的 sumtest.py)| 运行 ~/sumtest.py

发生的第一件事是提示您进行 PDB 调用。继续使用 c

下一个中断在 C 中的求和函数的中间。您可以使用 info locals 列出所有局部变量。就像在 PDB 中一样,c 用于继续执行到下一个断点,而 s 用于单步执行单条指令。

关于python - 使用pdb调试时可以查看python内置函数的源代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319883/

相关文章:

python - Beautiful Soup 4 CSS 同级选择器

c++ - 在 Visual Studio 2005 中的取消引用指针的地址上设置数据断点

python - 有没有一种方法可以连接到当前正在运行的 python 脚本以查看发生了什么?

python - 在 dynamoDB 表中存储大型列表以优化解码时间的最佳方法

python - 如何根据 SciPy 中的给定数据设置 numpy.arange 的值?

python - Django 获取一个月中每一天的对象数

python - 运行 Scrapy 但出现错误 : No module named _util

python3 : regex group 1, 意外结果

python - 从 python 中的一行中拉出特定的子字符串

c++ - 如何在VSCode上调试C++代码?苹果系统