点击上方卡片关注我
设置星标 学习更多技能
debugpy是由微软官方开发的Python调试适配器,实现了调试适配器协议。它是Visual Studio Code中Python调试功能的核心组件,同时也可以作为独立的调试工具使用。debugpy的主要优势在于支持远程调试、多线程调试和异步代码调试,能够帮助开发者在复杂的生产环境中快速定位和解决问题。
使用pip进行安装:
pip install debugpy安装完成后,可以通过以下代码验证是否安装成功:
import debugpyprint(debugpy.__version__)如果能够正常输出版本号,说明安装成功。
debugpy可以直接在代码中嵌入调试监听器,实现程序的断点调试,通过在代码中插入wait_for_client调用,程序会在该位置暂停,等待调试器连接后继续执行。
import debugpy# 启动调试监听器debugpy.listen(5678)print("等待调试器连接...")debugpy.wait_for_client()# 你的代码defcalculate(a, b): result = a + breturn resultx = calculate(10, 20)print(f"结果: {x}")debugpy最强大的功能之一就是远程调试,可以连接到运行在服务器、Docker容器或云端的Python程序。在远程服务器上启动调试监听后,本地IDE可以通过网络连接进行调试,就像调试本地代码一样方便。
import debugpy# 在远程服务器上启动调试监听# 0.0.0.0 表示接受所有网络接口的连接debugpy.listen(("0.0.0.0", 5678))print("调试服务器已启动,监听端口 5678")# 不等待客户端连接,程序继续运行# debugpy.wait_for_client() # 如需等待,取消注释# 你的应用代码defmain(): print("应用正在运行...")# 业务逻辑if __name__ == "__main__": main()debugpy支持在代码中设置断点,程序执行到断点位置时会自动暂停。通过breakpoint()函数可以在代码中插入断点,这是Python 3.7+版本的标准断点方式。当程序暂停时,可以在调试器中查看当前作用域内的所有变量值,还可以执行表达式来测试代码逻辑。
import debugpydebugpy.listen(5678)debugpy.wait_for_client()defprocess_data(data): result = []for item in data:# 在这里设置断点 breakpoint() processed = item * 2 result.append(processed)return resultdata = [1, 2, 3, 4, 5]output = process_data(data)print(output)debugpy支持设置条件断点,只有当指定条件满足时才会触发断点,通过编程方式设置断点条件,可以实现更加灵活的调试策略。
import debugpydebugpy.listen(5678)debugpy.wait_for_client()defanalyze_numbers(numbers):for i, num in enumerate(numbers):# 只在num大于100时暂停if num > 100: breakpoint() result = num ** 2 print(f"索引 {i}: {num} 的平方是 {result}")# 测试数据test_data = [10, 50, 150, 200, 30]analyze_numbers(test_data)debugpy完整支持多线程和异步程序的调试,可以在不同线程或协程中设置断点。在多线程程序中,调试器会显示所有活动线程的状态,可以切换到不同线程查看其调用栈和变量。对于异步程序,debugpy能够正确处理await语句和异步上下文,让异步代码的调试变得简单。
import debugpyimport asyncioimport threadingdebugpy.listen(5678)debugpy.wait_for_client()# 异步函数调试asyncdefasync_task(name, delay): print(f"任务 {name} 开始")await asyncio.sleep(delay) breakpoint() # 在异步函数中设置断点 print(f"任务 {name} 完成")returnf"结果_{name}"# 多线程调试defthread_worker(thread_id): print(f"线程 {thread_id} 启动") breakpoint() # 在线程中设置断点 result = thread_id * 10 print(f"线程 {thread_id} 完成,结果: {result}")asyncdefmain():# 创建异步任务 tasks = [async_task(f"Task{i}", i) for i in range(3)]await asyncio.gather(*tasks)# 创建线程 threads = [threading.Thread(target=thread_worker, args=(i,)) for i in range(2)]for t in threads: t.start()for t in threads: t.join()if __name__ == "__main__": asyncio.run(main())debugpy是Python开发中不可或缺的调试工具,它提供了从本地调试到远程调试的完整解决方案。通过简洁的API和强大的功能,debugpy让复杂程序的调试变得简单高效。无论是多线程程序、异步应用还是运行在远程服务器上的服务,debugpy都能提供可靠的调试支持。其与VS Code的深度集成,使得调试体验更加流畅。掌握debugpy的使用方法,可以大大提高开发效率,减少排查问题的时间。建议开发者在日常开发中充分利用debugpy的各项功能,特别是远程调试和条件断点等高级特性,这将使你的Python开发工作更加得心应手。
如果在编程工具充值使用上遇到麻烦,推荐一个牛逼的中转工具!一次性搞定 Codex 、Claude Code和 gemini,内容介绍和付费兑换详见文末阅读原文。


实测 4 个爆火 Skill,一句话生成画布/知识库/任务规划/自动发布
从海外公司注册到 Stripe 收款,跑通了出海收付款全流程(实操分享)
出海建站必备:告别AI味,这两个页面设计 Skills 太牛了!