如何使用pycharm调试python程序
使用pycharm的调试功能,可以对程序进行调试,也就debug。 调试功能主要包括设置断点, 单步执行, 查看调用栈信息, 查看变量的值,调试功能让程序在某一行代码上暂停,通过对这一刻的上下文环境进行检查,可以定位程序出问题的原因。
调试程序是程序员的日常,因为很难一次性把程序写对,因此,写完一个函数或者一段代码后,你需要测试自己的代码,如果有问题,就必须进行调试,也就是debug。
对于初学者,debug更有意义,通过debug你可以了解程序的执行过程,如何进行循环,为何break,if条件判断是否成立,运行过程中的每一个变量值如何变化,可以非常确定的讲,如果你不会debug,那么,永远都做不好编程。
1. 断点
只有在debug状态下,断点才会起作用,所谓断点,就是一处你希望程序暂停的地方。我们希望程序不要那么快的执行完,设置一个断点,程序运行到这里,就会停下来,之后,你就可以单步调试,所谓单步调试,就是你让程序执行一行,它就执行一行。
断点的设置非常容易,以pycharm为例,只需要左键点击代码左侧标识代码行数的区域即可
左键点击红框内的区域,就会出现一个小红点,再次点击,小红点会消失,这就是一处断点
2. debug模式运行
想要单步调试程序,需要进入debug模式运行程序
第一种方法,通过Run 找出下拉菜单,然后点击debug
第二种方法,右键点击代码区域,点击debug
3. debug工具使用
上图就是进入到debug模式后的界面,有三个重要区域需要你关注
3.1 调试区域
常用的功能键有5个
第1个功能键是 step over,你点击一下,程序就会执行一行
第2个功能键是 step into,如果这一行有函数,点击它就会进入到函数中
第3个功能键是 step into my code,如果这一行有函数,既有第三方库的函数,也有自己编写的函数,那么会优先进入到自己的函数里
第4个功能键是step out,就是从函数里退出来
第5个功能键是run to cursor,就是直接运行到下一处断点
3.2 调用栈区域
先看左侧的两个红框内的按钮
绿色箭头的按钮是resume progrom,是恢复程序执行,如果后续代码没有断点了,程序就会正常执行直到结束。
红方块的按钮是 stop,停止程序。
调用栈区域展示的,是调用栈的信息,通过它就能知道从程序开始运行到当前代码,经过了哪些调用关系
3.3 变量查看区域
变量查看区域,可以查看当前程序里的每一个变量的值,非常的方便,不仅如此,还可以自己添加表达式,查看自己关注的值,比如绿色框内的1%2 就是我通过左侧红色框内的+按钮添加上去的,添加的时候,写完表达式后,要点击回车才能完成添加。
除了这里可以查看变量的值,在程序页面里,debug模式下,鼠标滑动到变量上,也可以查看变量的值
除了pycharm提供的调试工具,还可以使用python提供的pdb,不过是命令行的,不如图形界面友好,还有一个ipdb,比pdb高级一些,有高亮显示,学会了debug,程序的运行结果和自己期望的不一致时,就可以单步跟踪调试啦,再也不用四处求人解答了
在调试控制窗口,共有 8 个按钮,他们的作用分别是什么呢?
- Show Execution Point:无论你的代码编辑 窗口的光标在何处,只要点下该按钮,都会自动跳转到程序运行的地方。
- Step Over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在不存在子函数的情况下是和step into效果一样的。简单的说就是,程序代码越过子函数,但子函数会执行,且不进入。
- Step Into:在单步执行时,遇到子函数就进入并且继续单步执行,有的会跳到源代码里面去执行。
- Step Into My Code:在单步执行时,遇到子函数就进入并且继续单步执行,不会进入到源码中。
- Step Out:假如进入了一个函数体中,你看了两行代码,不想看了,跳出当前函数体内,返回到调用此函数的地方,即使用此功能即可。
- Run To Cursor:运行到光标处,省得每次都要打一个断点。
- Evaluate Expression:计算表达式,在里面可以自己执行一些代码。
以上七个功能,就是最常用的功能,一般操作步骤就是,设置好断点,debug运行,然后 F8 单步调试,遇到想进入的函数 F7 进去,想出来在 shift + F8,跳过不想看的地方,直接设置下一个断点,然后 F9 过去。
pycharm中的debug模式
首先,还是用示例说话,我们书写一段简短的代码,来帮我们完成今天要讲的内容。
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)
肉眼识别下,猜猜结果是多少呢?初学者可能没见过 for 循环中的下划线,在 Python 中是占位符的意思,因为单纯的循环两次而已,并不需要用到它的循环结果。最终 result 会输出 6 。
在 pycharm 中,如何开启 debug 调试,一共有三种进入的方法,如下:
方法一:
方法二:
方法三:
还有一种方法,就是 pycharm 导航栏处,有个run,点开以后即可看到 debug ,这里就不截图演示了。
单纯的进入 debug 模式,你会发现,与正常的 run 去运行程序没有差异。差异就是 pycharm 的控制台部分,从 run 跑到了 debug 显示。
接下来要讲的,才是 debug 中的重中之重,即断点调试!
debug 的断点调试
断点调试,英文 breakpoint。用大白话来解释下,断点调试其实就是在程序自动运行的过程中,你在代码某一处打上了断点,当程序跑到你设置的断点位置处,则会中断下来,此时你可以看到之前运行过的所有程序变量。
来继续刚才的演示,pycharm 中如何设置断点。
点击前:
点击后,皮一下,每行代码都设置上断点:
设置完断点后,开启 debug 调试模式运行下,看到结果:
看到了这么多新摆设,是不是有点怕了!不怕,咱们先来从控制台每个按钮讲起:
如果要是忘记中文意思的话,没有关系,鼠标指到按钮处,悬浮一会儿,会有英文提示的。继续再来说横排按钮:
其中,横排最重要,经常用到的按钮,来解释一下,自己鼠标悬浮去看英文即可:
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 过去。
小技巧:我们可以在变量窗口选中一个变量再点击表达式窗口,表达式窗口会默认填充选中变量的值