跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 调试器
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python调试器 = '''Python调试器'''是开发者用来检查、分析和修复Python代码运行时错误的工具。它允许程序员逐行执行代码、检查变量状态、设置断点以及跟踪程序执行流程。调试器是解决逻辑错误和异常的关键工具,尤其当程序行为不符合预期时。 == 调试器简介 == Python标准库自带了一个内置调试器模块<code>pdb</code>(Python Debugger),它提供交互式调试环境。此外,集成开发环境(如PyCharm、VS Code)通常提供图形化调试工具,但底层仍依赖<code>pdb</code>的功能。 调试器的核心功能包括: * '''断点(Breakpoints)''':在特定行暂停程序执行。 * '''单步执行(Stepping)''':逐行运行代码。 * '''变量检查(Variable Inspection)''':查看当前作用域的变量值。 * '''调用栈跟踪(Call Stack Tracing)''':查看函数调用层次。 == 使用 pdb == === 启动调试器 === 可通过以下方式启动<code>pdb</code>: 1. '''命令行直接调用''': <syntaxhighlight lang="python"> import pdb; pdb.set_trace() # 在代码中插入断点 </syntaxhighlight> 2. '''命令行启动脚本''': <pre> python -m pdb script.py </pre> === 基本命令 === 调试会话中常用命令如下: {| class="wikitable" |+ pdb 主要命令 ! 命令 !! 缩写 !! 功能 |- | <code>break</code> || <code>b</code> || 设置断点 |- | <code>continue</code> || <code>c</code> || 继续执行到下一个断点 |- | <code>step</code> || <code>s</code> || 进入函数调用 |- | <code>next</code> || <code>n</code> || 执行下一行(不进入函数) |- | <code>list</code> || <code>l</code> || 显示当前代码上下文 |- | <code>print</code> || <code>p</code> || 打印变量值 |- | <code>quit</code> || <code>q</code> || 退出调试器 |} === 示例调试会话 === 假设有以下有错误的代码(<code>buggy.py</code>): <syntaxhighlight lang="python"> def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) result = factorial(5) print(f"5的阶乘是: {result}") </syntaxhighlight> 启动调试并修复括号错误: <pre> > python -m pdb buggy.py > /buggy.py(1)<module>() -> def factorial(n): (Pdb) b 5 # 在第5行设置断点 (Pdb) c # 继续执行到断点 > /buggy.py(5)factorial() -> return n * factorial(n-1) (Pdb) p n # 检查n的值 3 (Pdb) s # 进入递归调用 --Call-- > /buggy.py(1)factorial() -> def factorial(n): (Pdb) q # 退出调试器 </pre> == 高级调试技巧 == === 条件断点 === 仅在满足条件时触发断点: <syntaxhighlight lang="python"> import pdb; pdb.set_trace() # 启动后输入: (Pdb) b 8, n > 3 # 当n>3时在第8行中断 </syntaxhighlight> === 事后调试 === 程序崩溃后启动调试: <syntaxhighlight lang="python"> import pdb try: risky_operation() except Exception: pdb.post_mortem() # 检查崩溃时的堆栈 </syntaxhighlight> == 可视化调试工具 == === VS Code 调试器 === 1. 配置<code>launch.json</code>: <syntaxhighlight lang="json"> { "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal" } ] } </syntaxhighlight> 2. 通过GUI设置断点并查看变量。 === mermaid 调试流程 === <mermaid> graph TD A[发现异常行为] --> B{是否可复现?} B -->|是| C[设置断点] B -->|否| D[添加日志] C --> E[单步执行] E --> F[定位问题代码] F --> G[修复并验证] </mermaid> == 数学公式辅助调试 == 当调试数值计算时,可验证中间结果是否符合数学预期。例如验证欧拉公式: <math>e^{i\pi} + 1 = 0</math> 对应的Python检查: <syntaxhighlight lang="python"> import cmath result = cmath.exp(1j * cmath.pi) + 1 print(abs(result) < 1e-10) # 应输出True </syntaxhighlight> == 实际案例 == '''场景''':Web服务返回意外HTTP 500错误。 '''调试步骤''': 1. 在视图函数入口设置断点 2. 使用<code>n</code>逐步执行直到异常点 3. 检查请求参数和数据库查询 4. 发现SQL注入漏洞后修复: <syntaxhighlight lang="python"> # 错误方式 query = f"SELECT * FROM users WHERE id = {user_input}" # 正确方式 query = "SELECT * FROM users WHERE id = %s" cursor.execute(query, (user_input,)) </syntaxhighlight> == 最佳实践 == * 优先在集成开发环境中使用图形化调试器 * 复杂问题结合<code>logging</code>模块记录执行路径 * 单元测试中嵌入<code>pdb</code>调试失败用例 * 学习使用<code>ipdb</code>(增强版pdb)获得更好的交互体验 [[Category:Python测试与调试]] [[Category:Python编程工具]] [[Category:软件开发工具]] [[Category:编程语言]] [[Category:Python]] [[Category:Python 测试与调试]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)