问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

CPython源码学习:2、使用GDB调试Python

发布网友 发布时间:2024-10-01 20:11

我来回答

1个回答

热心网友 时间:2024-11-12 17:41

在深入探究CPython源码的过程中,首先要编译出Python的Debug版本,以便后续使用gdb进行调试。

安装gcc、g++、cmake等工具后,可参考Python开发者文档(Python Developer’s Guide)了解编译Python Debug版本的方法。

了解GDB的基本用法是进行调试的先决条件。在终端输入特定命令即可启动Python,并进入监控状态。

在此状态下,GDB会读取Python的符号表,但程序尚未执行。可在main函数设置断点,例如:

通过这种方式,程序会在python.c的第14行暂停。断点也可以通过(文件名:行号)的形式设置。

输入特定命令开始执行程序,程序将在设定的断点处暂停。此时,可以使用命令查看代码,或进入tui模式查看。

使用tui模式可以更清晰地看到断点位置,并通过输入tui获取更多使用方法。继续执行程序,Python将进入正常指令模式。

在GDB中,可以使用Python脚本文件进行调试。例如,创建一个名为test.py的Python脚本文件,内容为一个简单的赋值语句。

在GDB中监控Python执行,并给main函数配置输入参数。argc和argv是main函数的参数,与执行python时携带的参数类似。

配置参数后,在main函数中设置断点,并执行至main函数。此时,argc的参数将显示为2。

通过步进,可以观察到Python实际执行的函数是pymain_main。该函数分为两步:初始化系统参数和执行脚本。

继续步进,将到达pymain_run_python。在约610行,有一个分支判断,表示Python可以从命令行、module、import、文件和stdin执行。

使用test.py文件时,将进入pymain_run_file,并最终到达_PyRun__AnyFileObject函数。Python将从该函数开始解析test.py文件内容。

使用特定指令可以查看当前函数调用情况。从_PyRun__AnyFileObject进入后,Python将开始读取文件内容,并使用语法解析器解析文件,建立语法树,最终执行程序。

后续将继续研究Python语法解析器、语法树、符号表、编译器等内容,并通过GDB调试方式研究其原理,与大家共同交流。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2198香辣虾是什么意思 虾什么梗 肖战 刻纸制作需要哪些步骤 好玩的生存游戏手游(好玩的生存游戏手游推荐) 北京电脑职业培训学校都有哪些北京电脑培训班都有哪些 欧盟商标注册需要提供什么资料? 怎么注册欧盟商标?需要准备哪些材料? 5g手机有什么好处 5g手机大概多少钱 口水臭是什么原因呢? 口水臭是什么原因 口水臭怎么改善 程序调试利器GDB – 使用指南 在gdbserver+gdb的调试环境中No symbol table is loaded. Use the... 女子在苹果官网买手机收到酸奶,警方已立案,后续如何? looking forward to do和looking forward to doing是什么意_百度... look forward to doing和looking forward t 刚做好的网站,怎么才能排到百度前面 ...请问怎样能在用百度搜索时把搜索结果排在较前面? cad能批量修改图形吗? 怎样让自己的网站在百度上搜索靠前 如何将自己的网站在百度上排名靠前 在CAD中如何修改图形线宽? ...自己的网站在百度排名靠前,比如打开一个网站就能看见前几个的网站... 农村医保卡怎么激活 农村医保卡如何激活 ...新的风扇,CPU的温度降下去了,然后硬盘和显卡温度却上升了??_百度... ...运行游戏时显卡温度特别高,都八九十度,换新的风扇还是不管用,这是什... 我家台式电脑显卡温度过高怎么办,将近60度,如果要换风扇,换什么的,多 ... 分期乐京东e卡多久发货? 分期乐身份信息审核通过没配货能退款吗 苹果4.7寸手机小吗? 苹果6s跟苹果6手机壳一样吗? (gdb) print diff No symbol "diff" in current context.打印不出来... gdb调试技术 在拍拍上买了个CF改名卡不知道怎么改? CF怎么在拍拍上买东西? 今天在拍拍网充CF点貌似被骗咯,大家帮我看看!! 系统盘底下的pagefile.sys是什么文件? 支付的运费入什么科目 十寸披萨有多大 适合几个人 苹果6手机下载东西慢什么原因啊? 苹果6下载东西咋这么慢呢? 在北京哪些地方能吃到口味纯正的老北京涮羊肉? 穿PRADA的女魔基本信息 穿PRADA的女魔作者简介 滑囊炎怎么回事 怎么治疗滑囊炎 白菜和鸡蛋怎么炒,味道还不错,没肉也好吃,清淡 白菜炒鸡蛋怎么做清淡又有营养? 集电极正偏发射极反偏是什么 现在买苹果5 白色好还是黑色好 家长对孩子读书的评价 求求各位好心人救救俺吧TAT。