Pycharm debug调试教程(零基础轻松上手)
创始人
2024-11-10 02:38:48
0

文章目录

  • Pycharm debug调试教程(零基础轻松上手)
    • 1.如何给程序打断点?
    • 2.如何开启Debug调试?
    • 3.Debug控制台各按钮功能
    • 4.控制台各变量类型的图标
    • 5.Debug调试示例1
    • 6.Debug调试示例2
    • 7.Debug调试示例3
    • 附录
      • 示例程序1
      • 示例程序2
      • 示例程序3
    • 参考

Pycharm debug调试教程(零基础轻松上手)


debug,就是对于结果不符合预期的程序,将程序执行的过程放慢甚至中途暂停,通过逐步排查中间变量或者输出以定位有故障的代码段的过程。这个过程可以看作是逐步调试程序的方法。当我们点击“运行”时,程序并不是一下子全部执行完毕,而是逐步执行各个部分,每执行完一部分就检查结果是否符合预期。如果发现有问题,就暂停执行,逐行检查并修正,直到该部分的代码达到预期效果再继续执行下一部分。

breakpoint(断点调试),就是在程序自动运行的过程中,我们在代码某一处打上了断点,当程序跑到我们设置的断点位置处使,则会中断下来,此时可以看到之前运行过的所有程序变量。

1.如何给程序打断点?

image-20240125205450436

2.如何开启Debug调试?

image-20240125204653648

3.Debug控制台各按钮功能

image-20240125222418661

  • step over(F8快捷键):在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在不存在子函数的情况下是和step into效果一样的。
  • step into(F7快捷键):在单步执行时,遇到子函数就进入并且继续单步执行,有的会跳到源代码里面去执行。
  • step into my code(Alt+Shift+F7快捷键):在单步执行时,遇到子函数就进入并且继续单步执行,不会进入到源码中
  • step out(Shift+F8快捷键):假如进入了一个函数体中,看了两行代码,不想看了,跳出当前函数体内,返回到调用此函数的地方
  • Resume program(F9快捷键):恢复程序,直接运行到下一断点处。若无下一断点,则直接跑完程序。

一般操作步骤:设置好断点,debug运行,然后 F8单步调试,遇到想进入的函数 F7 进去,想出来在 Shift+F8,跳过不想看的地方,直接设置下一个断点,然后 F9 过去。

4.控制台各变量类型的图标

每个变量左侧的图标指示其类型。

image-20240422213330239

5.Debug调试示例1

  • 设置断点,debug运行

image-20240125223749180

  • 执行一次step into(F7快捷键)

image-20240125224318463

  • 执行一次step over(F8快捷键)

image-20240125224717885

再执行一次step over(F8快捷键)

image-20240125225549669

再执行一次step over(F8快捷键)

image-20240125225730230

再执行一次step over(F8快捷键)

image-20240125230044575

再执行一次step over(F8快捷键)

image-20240125230242135

  • 看够了循环,想直接看最终 result 加完的结果,直接在结果处打断点,执行Resume program(F9快捷键)

image-20240125230910729

image-20240125231106798

  • 执行一次step out(Shift+F8快捷键),跳出当前函数,返回到调用此函数的地方。

image-20240125231440455

  • 执行一次step over(F8快捷键)

image-20240125231750486

  • 再执行一次step over(F8快捷键)

image-20240125232103246

第一个示例就完成了!!!

6.Debug调试示例2

  1. 运行示例程序2,计算输入的不同水果的平均数量。

    image-20240125172210188

  2. 程序抛出一个异常,可以看到它的运行窗口中的堆栈跟踪(Traceback)。可以单击Traceback中的文件名和行号导航到编辑器。设置一个断点开始调查问题吧!!!(单击要设置断点的沟槽gutter,或者将光标插入该行并按Ctrl+F8

    image-20240125172415646

  3. 开始调试程序,点击toolbar的小虫子图标,或者按Shift+F9

    image-20240125172729129

  4. 想要检查函数是否发生了异常,可以计算调用这个函数的表达式。复制选定的表达式并且将其粘贴到Debug窗口Evaluate expression处。

    image-20240125173309536

  5. 按下Enter评估表达式。

    image-20240125173511447

  6. 可以看出这个表达式会导致异常,将此表达式添加到Debugger watches中,使其在将来自动计算。点击Debug窗口的图标。

    image-20240125174047111

  7. 为了找出导致这种异常的原因,单步执行选中的代码。(点击Debug窗口的图标,或者按F7

    image-20240125174846612

  8. 注意到,有几个嵌套调用,step into之后将他们都高亮了。按去选择extract_number函数,然后按Enter去单步执行。

    image-20240125175317401

  9. 让我们来看看我们要传递给int的是什么。Ctrl+Alt+F8为选中的参数调用快速求值表达式。

    image-20240125175833977

  10. 这个函数的目的是提取数字,但是可以看到目前提取的是字符串apple,有一个数组索引的错误,将索引值0修改为1。

    image-20240125180350289

  11. 重新运行我们的项目。

    image-20240125180454756

  12. 检查一下在修改后,调用extract_number是否还会抛出异常。单击step over不进入函数的单步执行)或者按F8

    image-20240125181618940

  13. 可以看到调用没有抛出异常,按F9或者单击resume program(恢复程序执行,直到碰到下一个断点)

    image-20240125181913318

  14. 又一次的跳到了我们设置的断点的位置,但是我们不需要停在这里了,因为这个地方的异常已经解决了。所以mute此处的断点,点击Mute Breakpoint。

    image-20240125194308414

  15. 最后,检查一下find_average的结果,首先将光标移动到return语句前,按Alt+F9执行程序到当前光标的那一行。

    image-20240125195849980

  16. Ctrl+Alt+F8为选中的参数调用快速求值表达式。结果正确,结束Debug调试。

    image-20240125200934657

第二个示例就完成了!!!

7.Debug调试示例3

  • 设置断点,debug运行。

    image-20240126103754085

  • console窗口用于和程序交互或者是查看程序的打印。键盘输入a的值。

    image-20240126104028381

    image-20240126104202355

  • 现在想要进入classify函数中,执行一次step into(F7快捷键)或者step into my code(Alt+Shift+F7快捷键)

    image-20240126104534315

  • 想看一下函数内部的细节,执行两次step over(F8快捷键)

    image-20240126104818651

  • 想看一下incr_by_two()这个函数,直接step into(F7快捷键)进去。

    image-20240126104939785

  • 进来又不想看这个函数了,直接step out(Shift+F8快捷键)跳出当前函数体,返回到调用此函数的地方。

    image-20240126105348501

  • 想直接查看classify函数返回的结果,在打一个断点,然后Resume program(F9快捷键)直接运行到断点处。

    image-20240126105702443

    image-20240126105836628

  • 不想一步一步执行了,直接Resume program(F9快捷键)跑完剩余的代码。

    image-20240126110136414

第三个示例就完成了!!!

附录

示例程序1

def sum_demo(x, y):     for _ in range(2):         x += 1         y += 1         result = x + y     return result   if __name__ == '__main__':     result = sum_demo(1, 1)     print(result) 

示例程序2

def find_average(value):     check_input(value)     result = 0     for s in value:         result += validate_number(extract_number(remove_quotes(s)))     return result / len(value)   def prepare_values():     return ["'apple 1'", "orange 2", "'tomato 3'"]   def extract_number(s):     return int(s.split()[0])   def check_input(value):     if (value is None) or (len(value) == 0):         raise ValueError(value)   def remove_quotes(s):     if len(s) > 1 and s[0] == "'" and s[-1] == "'":         return s[1:-1]     return s   def validate_number(number):     if number < 0:         raise ValueError(number)     return number   average = find_average(prepare_values()) print("The average is ", average)  

示例程序3

def incr_by_one(num):     print('Increase by one.')     return num + 1   def incr_by_two(num):     print('Increase by two.')     return num + 2   def classify(num):     print('if num is odd, increase by one; if num is even, increase by two.')     if num % 2 == 0:         result = incr_by_two(num)     else:         result = incr_by_one(num)     return result   if __name__ == '__main__':     a = input('Please input an integer:')     result = classify(int(a))     print(result)  

参考

  • PyCharm官方文档

  • PyCharm中文网

😊😊😊

相关内容

热门资讯

秒懂普及”珊瑚互娱房卡领取码“... 秒懂普及”珊瑚互娱房卡领取码“王者大厅房间卡怎么购买游戏中心打开微信,添加客服【113857776】...
秒懂教程!我买微信牛牛房卡链接... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享受...
正规平台有哪些,怎么买斗牛房卡... 微信游戏中心:火神大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
给大家讲解“购买斗牛房卡联系方... 起点大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
ia攻略/游戏推荐斗牛房卡出售... ia攻略/游戏推荐斗牛房卡出售长虹大厅/科技房卡多少钱一张Sa9Ix苹果iPhone 17手机即将进...
一分钟实测分享”时光互娱低价获... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
一分钟了解!牛牛房卡游戏平台加... 微信游戏中心:乐乐堂房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程序...
正规平台有哪些,金花房卡是正规... 海航大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
秒懂教程!微信牛牛房间怎么弄,... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享受...
终于找到“微信怎样开炸金花房间... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
秒懂百科”海洋世界哪里有详细房... 哪里有详细房卡介绍是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中...
头条推荐!游戏推荐斗牛房卡出售... 头条推荐!游戏推荐斗牛房卡出售新神兽/流樱大厅/微信链接房间卡怎么购买新神兽/流樱大厅是一款非常受欢...
推荐一款!怎么买斗牛房卡朱雀大... 微信游戏中心:朱雀大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
玩家攻略,牛牛房卡代理荣耀联盟... 荣耀联盟是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
IA解析/牛牛房卡游戏平台加盟... IA解析/牛牛房卡游戏平台加盟天道联盟/随意玩/微信链接房卡卖家联系方式Sa9Ix苹果iPhone ...
分享经验”百万牛哪里买低价获取... 分享经验”百万牛哪里买低价获取“新老夫子房卡充值游戏中心打开微信,添加客服【113857776】,进...
一分钟了解!金花房卡出售大众互... 今 日消息,大众互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
秒懂教程!微信买链接拼三张房卡... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享...
房卡必备教程“购买金花房卡联系... 新琉璃金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
1分秒分析”茄子娱乐房卡详细充... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...