当前位置:首页>python>debugpy,一个python代码精灵!

debugpy,一个python代码精灵!

  • 2026-09-02 20:14:04
debugpy,一个python代码精灵!

写代码时,最头疼的莫过于捉摸不定的 Bug。它像躲进代码深处的精灵,让人抓狂。

今天我们来聊聊 Python 的 debugpy 模块,一个能把调试过程变得像看侦探剧一样清晰的神器。

🎯 为什么是 debugpy?先让它跑起来

它的强大在于,不仅能调试本地脚本,还能像章鱼一样,将触手伸到远程服务器、Docker 容器里。我们先把它请出来,让它“监听”我们的代码。

# 1. 首先,安装并导入它(通常无需安装,VS Code自带)
import debugpy

# 2. 告诉它我们要监听哪个端口,等待调试客户端连接
#    5678 是默认端口,就像给门留了个特定的猫眼
debugpy.listen(5678)
print("调试器已就绪,正在等待客户端连接...")

# 3. 程序会在这里暂停,直到我们的调试器(比如VS Code)连上来
debugpy.wait_for_client()
print("调试客户端已连接,开始表演!")

执行上面这段代码,终端会停在 wait_for_client,静静等你。

当 VS Code 配置好远程调试并连上 5678 端口后,才会打印出“调试客户端已连接”。

🚀 实战:打断点就像“定身术”

等待连接后,真正的魔法开始了。我们可以在代码里随心所欲地设置断点。

程序执行到断点处,就像孙悟空喊了声“定”,一切状态都被冻结,任你查看。

# 假设我们有个有点复杂的函数
defcalculate_bonus(sales, rate):
print("计算奖金函数被调用了")
# 这是一个断点,程序执行到这里会暂停
    debugpy.breakpoint()
    bonus = sales * rate
print(f"计算出的奖金是:{bonus}")
return bonus

# 调用函数
sales_amount = 15000
bonus_rate = 0.12
final_bonus = calculate_bonus(sales_amount, bonus_rate)
print(f"最终应发奖金:{final_bonus}")

当调试客户端连接后,执行此脚本。

程序一碰到 debugpy.breakpoint() 就会立刻暂停,此时 sales 和 rate 的值都冻结在当前状态,方便我们检查逻辑是否正确。

🔍 灵魂三问:我是谁?我在哪?我要干什么?

暂停后,我们就可以在调试器里执行“灵魂三问”,查看当前作用域里的所有变量。

这比满世界写 print 函数高效得多,而且干净利落。

# 继续上面的场景,我们可以在暂停后,通过调试控制台执行命令
# 假设我们想偷偷修改一下逻辑,看看结果会怎样
current_sales = 15000# 这是当前变量

# 调试器里我们可以执行:
# print(f"当前销售额: {current_sales}")
# 甚至可以当场修改变量:
# current_sales = 20000

print(f"调试时被我修改后的销售额变成了: {current_sales}")

当然,这段代码本身不会自动修改变量,它的价值在于展示:当程序在断点处冻结时,我们能通过外部调试器(如 VS Code 的调试控制台)自由地探索和修改变量,这是 print 调试无法比拟的。

🆚 debugpy vs. 其他调试工具

说到调试,Python 自带的 pdb 是轻量级选手,功能纯粹但交互体验一般。而 ipdb 继承了 IPython 的衣钵,补全和展示更友好,但主要还是面向本地终端。

建议:日常本地开发,用好 VS Code 就是用好 debugpy。遇到棘手的线上问题或 Docker 环境,debugpy 是你应该最先想到的瑞士军刀。

📝 写在最后

debugpy 把调试从“猜谜游戏”变成了“解谜游戏”。

它让我们有机会真正走进代码的运行世界,而不是靠猜测和 print 来推断。希望今天这个小工具,能帮你下次面对 Bug 时,多一份从容,少一丝烦躁。

你在远程调试或本地调试时,遇到过什么“灵异事件”吗?

或者你有自己独特的调试技巧?欢迎在评论区留言分享,我们一起交流探讨~

最新文章

随机文章