pycharm中调试功能讲解

一、调试前的准备工作​​

1. 准备一段测试代码

先写一个简单的Python脚本(比如计算阶乘),故意留点问题:

复制代码
def factorial(n):
    result = 1
    for i in range(n):
        result *= i
    return result

print(factorial(5))  # 预期输出120,但实际输出0?
2. 为什么需要调试?
  • 当代码运行结果不符合预期时,调试能帮你逐行跟踪代码执行过程。
  • 可以查看变量值的变化,找出逻辑错误。

​​二、调试核心操作(带截图步骤)​​

​​1. 设置断点(Breakpoint)​​
  • ​​作用​​:让程序运行到此处时暂停,方便观察。

  • ​​操作​​:在代码行号左侧单击,出现红点(如图)。

    https://example.com/breakpoint.png
    (示例:在第3行result = 1和第5行result *= i设置断点)

​​2. 启动调试模式​​
  • ​方法1​:点击右上角的绿色甲虫图标 🐞。
  • ​方法2​ :右键代码 → 选择 Debug '文件名'。
​​3. 调试界面布局​​

启动调试后,PyCharm 会自动进入调试视图,主要分为:

  • ​​① 调试工具栏​​:控制代码执行(步进、恢复等)。

  • ​​② 变量窗口(Variables)​​:显示当前作用域内的变量值。

  • ​​③ 控制台(Console)​​:显示程序输出和输入。

    https://example.com/debug-layout.png


​​三、关键调试按钮详解​​

按钮图标 名称 快捷键 作用说明
▶️ Resume F9 继续执行程序,直到下一个断点或结束。
➡️ Step Over F8 执行当前行代码,​​不进入​​函数或循环内部。
⬇️ Step Into F7 执行当前行代码,​​进入​​函数内部(比如调试自定义函数时用)。
⬆️ Step Out Shift+F8 从当前函数内部跳出,回到调用它的位置。
🛑 Stop Ctrl+F2 终止调试进程。

​​四、实际调试流程(以示例代码为例)​​

​​1. 第一次暂停(断点:第3行)​​
  • ​观察变量窗口​ :此时 n=5,result=1(正确)。
  • ​点击 Step Over(F8)​ :执行 result = 1。
​​2. 进入循环(断点:第5行)​​
  • ​点击 Step Over(F8)多次​ ,观察每次循环时 i 和 result 的变化:
    • ​问题暴露​ :第一次循环时 i=0,导致 result *= 0,结果变为0!
    • ​错误原因​ :range(n) 生成的是 [0,1,2,3,4],应从 1 开始循环。
​​3. 修复代码​​

修改循环范围:for i in range(1, n+1):


​​五、调试进阶技巧​​

1. ​​条件断点(Conditional Breakpoint)​​
  • ​作用​:当满足特定条件时暂停。
  • ​设置​ :右键断点 → 输入条件(如 i == 3)。
2. ​​监视表达式(Watches)​​
  • ​作用​:实时监控某个变量或表达式的值。
  • ​操作​ :在 Watches 窗口点击 + → 输入表达式(如 i * 2)。
3. ​​重新运行调试​​
  • 修改代码后无需关闭调试,直接点击调试按钮重新启动。

​​六、常见问题排查​​

1. ​​调试时程序没有暂停?​​
  • 检查是否设置了断点。
  • 确保代码确实执行到了断点位置。
2. ​​变量窗口没有显示值?​​
  • 确认程序已暂停在断点处。
  • 检查变量是否在当前作用域内(比如循环内部变量需在循环中查看)。
3. ​​如何调试报错行?​​
  • 当程序抛出异常时,PyCharm 会自动跳转到错误行,并显示堆栈信息。

​​七、总结:调试的核心思路​​

  1. ​定位问题区域​:通过错误提示或日志缩小范围。
  2. ​设置断点​:在可疑代码前后暂停。
  3. ​逐行跟踪​:观察变量是否符合预期。
  4. ​验证修复​:修改后重复调试直到正确。
相关推荐
开开心心就好2 分钟前
证件照排版打印工具,免费可自定义尺寸
服务器·开发语言·算法·随机森林·pdf·音视频·散列表
方知我5 分钟前
01FastAPI基础入门
人工智能·python
我是高手高手高高手8 分钟前
宝塔 PHP多版本,切换PHP默认版本
开发语言·php
CodeYp20199 分钟前
第16讲:set 和 map 的使用
开发语言·c++·set·map
物联网老王10 分钟前
第05篇-Agent 连不上工具?MCP 就是那根“USB-C”
开发语言·人工智能·ai·aigc·ai编程
DreamLife☼25 分钟前
Agent与大语言模型的集成
windows·python·语言模型
BK贝壳6 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
2601_966949657 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨9 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪10 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang