当前位置: 首页 > news >正文

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


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

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

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

​1. 第一次暂停(断点:第3行)​
  • ​观察变量窗口​​:此时 n=5result=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. ​验证修复​​:修改后重复调试直到正确。

相关文章:

  • PGAdmin下载、安装、基础使用
  • Oracle OCP知识点详解3:使用 vim 编辑文件
  • Web 前端技术解析:构建高效、动态的用户体验
  • qt中,父类中有Q_OBJECT,子类中还需要加Q_OBJECT吗
  • Shell的运行原理以及Linux当中权限问题
  • Flutter 文本组件深度剖析:从基础到高级应用
  • TGCTF web
  • SQL刷题日志(day1)
  • 狂神SQL学习笔记二:安装MySQL
  • DeepSeek AI大模型:中国智能时代的“争气机“-AI生成
  • Python实例题:Python自动获取小说工具
  • 如何将一个8s的接口优化到500ms以下
  • 【Pandas】pandas DataFrame keys
  • 【Python浅拷贝与深拷贝详解】
  • 【QT】 常用控件【输入类】
  • 【Java学习笔记】注释
  • 第一章 计算机网络和因特网
  • 在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener)
  • 虾分发平台平台优势
  • 【Linux】深入理解线程控制
  • 烟花、美食和购物优惠都安排上了,上海多区开启热闹模式
  • 河北:开展领导干部任性用权等形式主义官僚主义问题专项整治
  • AI观察|算力饥渴与泡沫
  • 十四届全国人大常委会举行第四十三次委员长会议 ,听取有关草案和议案审议情况汇报
  • 特朗普的百日执政支持率与他“一税解千愁”的世界观和方法论
  • 马上评丨机械停车库成“僵尸库”,设计不能闭门造车