1.6 程序调试技巧
在开发网站的过程中,为了确保功能可以正常运行及验证是否实现开发需求,开发人员需要对已实现的功能进行调试。Django的调试方式分为PyCharm断点调试和调试异常。
1.6.1 PyCharm的Debug模式
我们知道,PyCharm调试Django开发的项目,PyCharm的版本必须为专业版,而社区版是不具备Web开发功能的。使用PyCharm启动Django的时候,可以发现PyCharm上带有爬虫的按钮,该按钮用于开启Django的Debug调试模式,如图1-21所示。
图1-21 调试按钮
单击图1-21中的调试按钮(带有爬虫的按钮),即可开启调试模式,在PyCharm的正下方可以看到相关的调试信息,如图1-22所示。
图1-22 调试信息
从图1-22的调试界面可以看到有多个操作按钮,我们将常用的调试按钮的功能说明以表格的形式表示,如表1-4所示。
表1-4 常用的调试按钮的功能说明
我们通过简单的示例来讲述如何使用PyCharm的调试模式。以MyDjango项目为例,在index文件夹的views.py文件里,视图函数index添加变量value并且在返回值return处设置断点,如图1-23所示。
图1-23 设置断点
设置断点是在图1-23的方框里单击一下即可出现红色的圆点,该圆点代表断点设置,当项目开启调试模式并运行到断点所在的代码位置,程序就会暂停运行。
开启MyDjango项目的调试模式并在浏览器上访问127.0.0.1:8000,在PyCharm正下方的调试界面里可以看到相关的代码信息,如图1-24所示。
图1-24 代码信息
调试界面Debugger的Frames是当前断点的程序所依赖的程序文件,单击某个文件,Variables就会显示当前文件的程序所生成的对象信息。
单击按钮,PyCharm就会自动往下执行程序,直到下一个断点才暂停程序;单击按钮,PyCharm只会执行当前暂停位置的下一步代码,这样可以清晰地看到每行代码的执行情况。这两个按钮是断点调试最为常用的,它们能让开发者清晰地了解代码的执行情况和运行逻辑。
如果程序在运行过程中出现异常或者代码中设有输出功能(如print),这些信息就可以在PyCharm正下方调试界面的Console里查看,如图1-25所示。
图1-25 输出信息
启动项目的时候,从图1-25的运行窗口可看到“System check identified no issues (0 silenced)”信息,该信息表示Django对项目里所有的代码语法进行检测,如果代码语法存在错误,在启动的过程中就会报出相关的异常信息。
图1-25中的“This is test!”是视图函数index的“print(value)”代码的输出结果;"GET /HTTP/1.1" 200代表浏览器成功访问127.0.0.1:8000,其中200代表HTTP的状态码。
注 意
断点调试无法在模板文件(templates的index.html)设置断点,因此无法对模板文件进行调试,只能通过PyCharm的调试界面Console或浏览器开发者工具进行调试。
1.6.2 异常提示进行调试
PyCharm的调试模式无法调试模板文件,而模板文件需要使用Django的模板语法,若想调试模板文件,则最有效的方法是查看PyCharm或浏览器提示的异常信息。
调试异常需要根据项目运行时所产生的异常信息进行分析,使用浏览器访问路由地址的时候,如果出现异常信息,就可以直接查看异常信息找出错误位置。比如在templates的模板文件index.html里添加错误的代码,如下所示:
当运行MyDjango项目并在浏览器访问127.0.0.1:8000的时候,PyCharm正下方的调试界面Console就会出现异常信息,从异常信息中可以找到具体的异常位置,如图1-26所示。
图1-26 异常信息
除了在PyCharm正下方的调试界面Console中查看异常信息外,还可以在浏览器上分析异常信息,比如模板文件index.html的错误语法,Django还能标记出错位置,便于开发者调试和跟踪,如图1-27所示。
图1-27 异常信息
还有一种常见的情况是网页能正常显示,但网页内容出现部分缺失,对于这种情况,只能使用浏览器的开发者工具对网页进行分析处理。以templates的模板文件index.html为例,对其添加正确的代码,但在网页里出现内容缺失,如下所示:
再次启动MyDjango项目并在浏览器访问127.0.0.1:8000的时候,浏览器能正常访问网页,但无法显示{{ value }}的内容,打开浏览器的开发者工具可以看到,{{ value }}的内容是不存在的,如图1-28所示。
图1-28 开发者工具
此外,浏览器的开发者工具对于调试Ajax和CSS样式非常有用。通过生成的网页内容进行分析来反向检测代码的合理性是常见的手段之一,这是通过校验结果与开发需求是否一致的方法来调试项目功能的。