Python 3.7 的内置 breakpoint() 函数如何 backport 到 3.6 中?

2021-02-08 01:47:12 +08:00
 littleMaple

一个简单的 backport 实现是:

def breakpoint():
    import pdb
    pdb.set_trace()

可是这样做和原生 breakpoint() 的行为并不完全一致,这样做虽然也能进入调试器,但是比原生 breakpoint() 多了一个栈帧。我尝试在 CPython 的源码中寻找 breakpoint() 的官方实现,无奈以失败告终,只找到了其单元测试 TestBreakpoint .

2713 次点击
所在节点    Python
25 条回复
littleMaple
2021-02-10 16:50:26 +08:00
@ungrown #2 自己平时调试用的话确实不必太强迫完美,但是因为可能存在未来的第三方代码使用者,所以还是遵循最小惊讶原则较好,避免接口行为的不一致.
littleMaple
2021-02-10 16:58:54 +08:00
@shniubobo #3 感谢答复!原来内置函数和对象的源代码是在名为 bltinmodule.c 的文件中,难怪我找不到,原来名字用了缩写,下次我会记住了!不过如果 CPython 的文档有个接口与源代码位置的对应索引表格就好了,每次要找某对象或函数的源码都需要在迷宫中自行摸索一番,StackOverflow 上面也有不少询问某个 Cpython 对象或函数的源代码具体在哪里的相关问题,这方面看来文档还有可以再改进的空间,让对 CPython 代码库不熟悉的 beginner 也能便利地 navigate.
littleMaple
2021-02-10 17:06:55 +08:00
@XIVN1987 #11 感谢推荐,试了一下,确实比内置的 pdb 要丰富和强化很多,虽然启动的时候略重了点,不过用起来蛮舒服的.
littleMaple
2021-02-10 17:29:08 +08:00
@no1xsyzy #14 @learningman #15 可能还要考量一下算法竞赛圈的大占比组成族群——初中生与高中生。至少在我所在的区域,初中生高中生中互称“大佬”,“大神”,“学霸”,“卖弱”,“我是蒟蒻”的整套言语框架算是蔚然成风的。无独有偶,名为「李借之」的 matters.news 用户也写了一篇文章 [我如何看待“大佬”这类说法 —— 对身边大陆学生口头话语的观察与思考]( https://matters.news/@lijiezhi/%E6%88%91%E5%A6%82%E4%BD%95%E7%9C%8B%E5%BE%85-%E5%A4%A7%E4%BD%AC-%E8%BF%99%E7%B1%BB%E8%AF%B4%E6%B3%95-%E5%AF%B9%E8%BA%AB%E8%BE%B9%E5%A4%A7%E9%99%86%E5%AD%A6%E7%94%9F%E5%8F%A3%E5%A4%B4%E8%AF%9D%E8%AF%AD%E7%9A%84%E8%A7%82%E5%AF%9F%E4%B8%8E%E6%80%9D%E8%80%83-zdpuB32wqJftvbH1HwNRewKnyaLxY8kPiSJVrzk9NyPyUUTmn ) 来对这一现象进行详细的观察分析,她在其文章的评论区也与持有其他观点的人进行了讨论,「竞赛圈是这个言语框架的发源地」的观点也在评论区中有出现.
learningman
2021-02-10 19:09:30 +08:00
@littleMaple 我觉得这篇文章有过度解读的嫌疑,而且作者字里行间有点偏向西方的日常来贬斥中国,不算很舒服

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/752234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX