1、引言
在编程过程中,调试作为一个不可或缺的步骤,帮助我们更高效地检查和发现代码中的错误。借助Pycharm,我们不仅可以使用传统的print()
来输出调试信息,还能更加轻松地使用「单步调试」来逐步分析程序执行过程,进一步检查错误。因此,本篇文章将会介绍如何在Pycharm中使用单步调试技巧,以提高程序调试的效率。
2、正文
1、设置断点
在我们运用Pycharm调试程序之前,首先要做的就是在需要调试的代码行处设置断点,即在需要暂停程序执行的位置下断点。我们可以通过两种操作方式来设置断点:
- 在需要设置断点的代码行左侧单击鼠标左键,设置一个红色圆圈表示断点;
- 在需要设置断点的代码行处,使用快捷键
Ctrl+F8
(Windows系统)或Command+F8
(Mac系统)来设置一个断点。 下面的示例代码中,我们使用快捷键Ctrl+F8
在第4行设置了一个断点:
def main():
lst = [1, 2, 3, 4, 5]
for i in lst: # 在此行设置断点
print(i)
print('End')
if __name__ == '__main__':
main()
2、使用单步调试
一旦我们在需要调试的代码行处设置了断点,我们就可以启动Pycharm的单步调试模式来检查程序运行过程中的错误。在Pycharm中,单步调试包括以下三种模式:
- Step over:执行当前行,并跳过函数内的代码;
- Step into:执行当前行,并进入函数内部的第一行代码;
- Step out:程序退出当前函数,并到达调用当前函数的下一行代码,通常用于跳出递归函数的执行。 可以通过以下方式启动Pycharm的单步调试模式:
- 在需要调试的代码行上单击右键,选择「Debug '文件名.py'」选项;
- 在Pycharm主界面的菜单栏中点击「Run」-「Debug」-「Debug '文件名.py'」选项,或使用快捷键
Ctrl+Shift+D
(Windows系统)或Command+Shift+D
(Mac系统)启动调试模式。 在单步调试模式的命令面板中,我们可以看到以下四个按钮: - Resume Program:调试模式下恢复程序正常运行;
- Step Over:单步跳过当前行(函数不跳);
- Step Into:单步进入当前行所调用的函数;
- Step Out:跳出当前函数,执行调用该函数的下一条代码。 下面的示例代码中,我们使用「Step Over」、「Step Into」和「Step Out」三种模式来演示单步调试的过程:
def foo():
print("Step into foo")
return 1
def main():
a = 1 + 2
b = a + foo() # 在此行设置断点
print(b)
if __name__ == '__main__':
main()
当我们在第7行处设置断点并执行单步调试时,程序会在第7行暂停,然后我们可以使用「Step Over」单步跳过当前行;使用「Step Into」单步进入函数foo()
中的第一行代码;使用「Step Out」跳出函数foo()
,执行调用foo()
的下一条代码。
3、使用变量监视器
Pycharm还提供了一个非常有用的工具,名为「变量监视器」,可以在调试时实时查看程序中各个变量的值。通过打开「Watch」窗口,我们可以添加需要监视的变量名,每次程序执行到一个断点时,「Watch」窗口会显示该变量的值,从而帮助我们更好地理解程序的行为。
在Pycharm中,我们可以通过点击下方的三个窗口之一的「Variables」打开「Watch」窗口,然后单击右下角的「+」号来添加我们需要监视的变量名。在添加完变量名后,我们可以一步一步执行程序,观察变量的值的变化情况。下面是一个示例代码,在代码的某行设置了断点,同时在「Watch」窗口添加了变量a
和lst
:
def main():
lst = [1, 2, 3, 4, 5]
a = 0
for i in lst: # 在此行设置断点
a += i
print(a)
if __name__ == '__main__':
main()
4、使用断言
在程序开发中,我们经常需要使用断言来检查程序执行的正确性。Pycharm中的「断言」功能可以让我们更快捷地进行代码验证。使用「断言」功能时,我们可以在代码中使用assert
语句来判断是否满足特定条件,并在满足特定条件时继续程序运行,不满足特定条件时则提示错误信息并停止程序的执行。
我们可以在Pycharm中的设置中开启「断言」功能,并设置断言失败时的行为:停止程序运行(默认行为)或运行Python控制台。使用断言需要注意的是,在完成调试后,需要在项目中将相关代码的assert
语句删除;
下面的示例代码中,我们在程序的第15行处添加了一个断言,判断lst
中元素是否均为偶数:
def main():
lst = [2, 4, 6, 8, 9] # 在此处添加断言
for i in lst:
print(i)
assert all([i%2 == 0 for i in lst])
if __name__ == '__main__':
main()
3、小结
本篇文章重点介绍了如何在Pycharm中使用单步调试工具,让开发者以更高效的方式进行程序的调试和检测。通过本篇文章,我们了解了「设置断点」、「单步调试」、「变量监视器」和「断言」等工具的使用方法,希望对读者有所帮助。