我可以进入Python库代码吗?

时间:2014-10-05 01:46:46

标签: python debugging libraries system-calls pdb

当我运行我的Python调试器时,我可以进入我编写的函数。但是,如果我尝试进入像os.mkdir("folder")这样的库函数,那么它就会跨越"相反。有没有办法进入内置库函数,看看Python在幕后做了什么?

理想情况下,可以在PyPy中执行此操作,以便您可以继续深入研究Python代码。

2 个答案:

答案 0 :(得分:6)

Python调试器

pdb无法进入像os.mkdir这样的C函数,但gdb可以。试试这个:

gdb --args python whatever.py ...

然后:

start
break posix_mkdir
continue

你应该看到它在Python的os.mkdir实现中停止,详见此处:https://stackoverflow.com/a/16617835/4323

答案 1 :(得分:5)

os.mkdir()在C代码中实现,pdb无法进入该功能。

您仅限于调试纯 Python 代码;如果该代码是否是标准库的一部分并不重要。例如,您可以单步进入shutil模块或os.path

os.mkdir() 调用本机代码,因为它与操作系统交互;即使PyPy必须遵循底层(主机-Python)os.mkdir()调用来处理该部分,因此即使在PyPy中也不能使用pdb进入它。事实上,就像在CPython中一样,标准库的那一部分是RPython运行时的一部分,并且不被视为原生Python代码'通过PyPy,就像内置类型是运行时环境的一部分一样。

您可以运行PyPy解释器未翻译(因此不要静态编译RPython代码,但让Python直接运行PyPy解释器),但这只能让您访问RPython代码路径,而不是os.mkdir() C代码。