美文网首页
使用gdb查看Python print函数的调用栈

使用gdb查看Python print函数的调用栈

作者: 好好读研 | 来源:发表于2020-04-03 17:44 被阅读0次

由于项目的原因我想看看Python中print一类的函数的执行过程,试过单步调试的方法,但太过繁琐,因为对源码不熟悉还可能错过本该跟踪进去的函数,导致始终无法很清晰的看到整个流程。在网上搜索了一下发现,gdb调试器中可以捕获系统调用并打印当前的调用栈,这给了我新的启发。

我们在Ubuntu中实验一下。

输入以下命令启动调试器。

启动调试器

随后捕获系统调用write

捕获write

然后输入run运行程序。

运行程序

可以看到,gdb捕获了一个write系统调用。接着使用bt或者backtrace命令查看当前的调用栈。

image

打印出的信息非常多,我们可以看到一些熟悉的函数。比如builtin_print(),这是print函数的C语言实现,在bltinmodule.c中。

builtin_print()函数(部分)

在经历了一系列步骤之后,最后调用了Py_write_impl()函数,在fileutils.c中,这就应该是调用系统调用的地方了。

Py_write_impl()函数(部分)

果然,我们找到了系统调用的位置。

用这种方法观察就非常快了,还可以忽略到中间一些无关紧要的用于封装的函数,提升了效率。

相关文章

网友评论

      本文标题:使用gdb查看Python print函数的调用栈

      本文链接:https://www.haomeiwen.com/subject/jzskphtx.html