函数断点:VS Code 里最被低估的调试神器

举报
golang学习记 发表于 2026/09/27 16:56:53 2026/09/27
【摘要】 如果你还在用 print() 大法调试代码,那你可能错过了一个更优雅的工具。假设你有这样一个 Python 文件:ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(l...

如果你还在用 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 + b

def 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() 来追踪同一个函数的调用时,就该换成函数断点了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。