我能在使用pdb调试时查看Python内置函数的源代码吗?

4
我该如何查看Python内置函数的代码,例如进入sum()
请参考以下链接:https://docs.python.org/2/library/functions.html#sum
我期望使用以下代码和pdb中的s命令来查看sum()的操作:
import pdb
def adder(nums):
  x = sum(nums)
  return x

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

这取决于sum()的执行方式。一些Python模块是用C编写的(以提高性能),无法在pdb中逐步执行。更新:我刚刚检查了Python的sum源代码,它似乎是用C编写的。 - user849425
绝大多数(全部?)的Python“builtins”都是用C语言编写的。 - aruisdante
@aruisdante 检查了 Python/bltinmodule.c 文件,似乎 __builtin__ 模块是完全用 C 写的。 - user849425
1个回答

6

一些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 Debugger启动您自定义编译的调试Python | gdb ./python

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

  7. 从GDB运行您的脚本(我称之为sumtest.py)| run ~/sumtest.py

首先会提示您进行PDB调用。继续使用c

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接