基本调试
静态代码分析
Python作为一门动态语言,解释器只会在运行之前检查代码的基本语法,不能进行更加详细的错误分析。例如,"引用未定义的变量", "传递了错误的参数"。这些错误只能在运行的时候被抛出。 静态代码分析 就是用来解决这样问题的技术,它试图在程序未运行之前对代码分析来检查一些可能的错误,避免在运行之后才发现,提升开发效率。
安装Pylint
pip install pylint
使用Pylint
默认条件下,Pylint会同时分析错误信息和编码风格问题,这里就不讨论编码风格了,使用-E
选项来只找出错误。
pylint -E fifoqueue.py
结果:
************* Module fifoqueue_error
E: 5,20: Undefined variable 'threading' (undefined-variable)
E: 18,18: Undefined variable 'queue' (undefined-variable)
E: 15,19: Access to member 'queue' before its definition line 19 (access-member-before-definition)
准确的找出了,上段代码的问题:
- 没有导入threading模块
- 第18行中,
dequeue
函数里面引用了未定义的queue
变量,实际上是应该使用self.queue
self.queue
变量未在构造函数__init__
内初始化。
但是pdb最好能掌握,因为在任何环境下,这个调试器都是可以用的,通过
python -m pdb foo.py
你就能快速进入调试界面。安装pudb
pip install pudb
进入调试界面
pudb fifoqueue_error.py
进入pudb之后,pudb暂停在程序的第一行代码处。"图形界面"有五个区域: 代码区、命令行区、变量区、栈区、断点区。
出错界面
按下c字符(Continue),pudb会继续运行程序。在这里,由于代码错误,会抛出错误:
可以显示运行时异常的代码位置、本地变量值、栈。你可以在Command line中输入一些调试命令看到更多的你想要
pdb调试:
pdb.set_trace()
b 加入断点
cl 清除断点
加入到需要加断点的代码处,运行时,执行在此处即可中断,单步、继续、查看变量值等功能都有,不妨help下
在settings里面搜索可以找到相应设置
在Console Font 和python当中设置关键字颜色
Ctrl+/ 和 三个点都是注释
在pycharm安装库的时候可以自己选择从哪里下载
shift+F9断点调试
引用模块包
生成变量
查看某个值
step over执行下一行
stop into 进入当前对象里面的方法,最后返回当前方法出来执行下面的
更上面差不多
跳到下一个断点
和watch一样
pycharm调django很慢
使用 pdb 进行调试
pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令,详情见表 1。
表 1. pdb 常用命令
命令 | 解释 |
---|---|
break 或 b 设置断点 | 设置断点 |
continue 或 c | 继续执行程序 |
list 或 l | 查看当前行的代码段 |
step 或 s | 进入函数 |
return 或 r | 执行代码直到从当前函数返回 |
exit 或 q | 中止并退出 |
next 或 n | 执行下一行 |
pp | 打印变量的值 |
help | 帮助 |
c 执行程序,忽略断点
l 查看代码
n 执行下一行
pp 打印相应变量值
q 终止退出
Pycharm 支持表达式求值,可以通过选中该表达式,然后选择“Run”->”Evaluate Expression”,在出现的窗口中直接选择 Evaluate 便可以查看。
设置断点的方法非常简单
如果要动态的监测某个变量可以直接选中该变量并选择菜单”Run”->”Add Watch”添加到 watches 栏中。当调试进行到该变量所在的语句时,在该窗口中可以直接看到该变量的具体值。
多线程调试:对于多线程程序来说,通常会有多个线程,