函数断点:VS Code 里最被低估的调试神器
如果你还在用 print() 大法调试代码,那你可能错过了一个更优雅的工具。
假设你有这样一个 Python 文件:
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
- ounter(line
def add(a, b):return a + bdef main():print("hello world")print(add(1, 2))print("do something")r = add(1, 2)print(r)if __name__ == "__main__":main()
这段代码很简单,但如果 add 函数的行为不符合预期,你想知道它到底被调用了几次、每次传入了什么参数,用 print() 就得手动加好几处。而用函数断点,你只需要告诉 VS Code:“每次调用 add 的时候,把程序停下来让我看看。”
函数断点是什么?
函数断点不依赖代码的具体行号,而是基于函数名来设置。你告诉调试器“我要在 add 被调用时暂停”,它就真的会在每次 add 被调用时停下来,不管你是在第几行调用的。
设置方式很简单:在调试面板的 BREAKPOINTS 区域,点击 + 按钮,选择 Add Function Breakpoint,输入函数名(比如 add)即可。函数断点在列表中会显示为一个红色三角形图标,和普通行断点(红色圆点)区分开。
输入add
你也可以直接使用命令面板,搜索 function b 
debug代码的时候,只要代码执行到这个函数,断点就会停在这个函数上面 
为什么它比行断点更好用?
行断点的问题在于:你需要知道代码在哪一行。如果函数被调用的地方很多,你要么在每一处都设一个断点,要么在函数定义的第一行设一个断点——但这样你就无法区分“第一次调用”和“第二次调用”的区别。
函数断点的优势在于:你只关心“谁调用了这个函数”,不关心它被调用的位置。这在你追踪一个被多处调用的工具函数、或者调试一个第三方库的入口函数时,特别有用。
以上面的代码为例:如果你在 add 的定义处设置行断点,程序会在 add 的第一行暂停。但如果你设置函数断点,你可以在暂停时清楚地看到调用栈——是 main 里的哪一行调用了它,a 和 b 分别是什么值。
什么时候该用函数断点?
-
追踪工具函数的调用时机:你想知道一个公共函数到底被哪些地方调用了 -
调试第三方库或框架:源码不在你的项目中,但你可以在调用它的函数上设断点 -
调试回调函数:你不知道回调会在哪个时间点被触发,函数断点可以帮你捕获它
函数断点不是“更高级的断点”,而是“更适合特定场景的断点”。当你发现自己反复在多个位置手动加 print() 来追踪同一个函数的调用时,就该换成函数断点了。
- 点赞
- 收藏
- 关注作者
评论(0)