You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在pytest中设置breakpoint()为何进入被调用函数而非测试函数本身?

问题原因与解决方法

原因

这是因为pdb默认会在函数被调用时触发断点(即--Call--事件),你调用np.random.choice后,numpy内部的一些延迟加载函数(比如_prod_dispatcher)刚好在breakpoint()启动pdb的瞬间完成初始化调用,导致pdb先停在了numpy的内部函数上,而非你设置断点的测试函数行。

解决方法

临时解决(单次调试)

当pdb停在numpy的函数里时,直接输入命令 c(continue),就能跳转到你设置的breakpoint()所在的test_my_function代码行。

永久解决(全局配置)

在你的用户目录下创建/编辑.pdbrc文件,添加一行:

set callpdb off

这样pdb默认就会关闭函数调用时的断点触发,以后再用breakpoint()就会直接停在你设置的位置。

提前初始化numpy

在测试函数的breakpoint()前,提前触发numpy相关函数的初始化,比如:

def test_my_function():
    test_value = np.random.choice(...)
    # 提前触发numpy内部函数初始化
    np.prod([1])
    breakpoint()

这样numpy的_prod_dispatcher会在breakpoint启动前就完成加载,不会再触发pdb的调用断点。

内容的提问来源于stack exchange,提问作者Alissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:52:33