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

Dav*_*ave 4 python debugging built-in python-2.7 pdb

如何检查 python 内置函数的代码,例如单步执行sum()

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

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

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

pdb.set_trace()
print adder([1, 2, 3,4])
Run Code Online (Sandbox Code Playgroud)

小智 6

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

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

  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)|run ~/sumtest.py

首先发生的事情是系统提示您进行 PDB 调用。继续使用c

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