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

时间:2014-04-27 05:48:24

标签: 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])

1 个答案:

答案 0 :(得分:4)

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

  1. 下载https://www.python.org/downloads/

  2. 中的Python源代码
  3. 解开Python源代码| tar xzvf Python-2.7.6.tar.gz

  4. 输入untarred目录并使用|运行配置脚本./configure

  5. 使用调试符号进行编译make -g

  6. 使用GNU Debugger |启动自定义编译的调试Python gdb ./python

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

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

  9. 首先发生的是提示您进行PDB呼叫。继续使用c

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