# 主题七:调试及性能分析
“最有效的 debug 工具就是细致的分析,配合恰当位置的打印语句” — Brian Kernighan, Unix 新手入门。
修改日志的颜色,安装错误的级别进行分类。红,黄,白,级别逐渐降低可以迅速定位问题出现的位置。
建议自己尝试一遍 debug 。
ubuntu 自带 python 2.7 ,这个不能卸载,因为 Ubuntu 系统依赖 python 2.7 环境。建议另外安装 python3 环境。
我单独安装了一个 python 3.8 的环境,采用 pip3 下载的 ipdb 进行调试。
虽然这个代码很容易的能后看出第五行数组越界,但是还是建议自己跟踪一遍,学习一下相关命令。以便于后续解决同类问题。
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n):
if arr[j] > arr[j+1]:
arr[j] = arr[j+1]
arr[j+1] = arr[j]
return arr
print(bubble_sort([4, 2, 1, 8, 7, 6]))
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
运行结果是数组越界问题:
$ python /mnt/f/bubble.py
Traceback (most recent call last):
File "/mnt/f/bubble.py", line 10, in <module>
print(bubble_sort([4,2,1,8,7,6]))
File "/mnt/f/bubble.py", line 5, in bubble_sort
if arr[j] > arr[j+1]:
IndexError: list index out of range
1
2
3
4
5
6
7
2
3
4
5
6
7
开始调试:$ python3 -m ipdb /mnt/f/bubble.py
- l(ist) - 显示当前行附近的11行或继续执行之前的显示;
- s(tep) - 执行当前行,并在第一个可能的地方停止
- n(ext) - 继续执行直到当前函数的下一条语句或者 return 语句;
- b(reak) - 设置断点(基于传入对参数);
- p(rint) - 在当前上下文对表达式求值并打印结果。还有一个命令是pp ,它使用 pprint 打印;
- r(eturn) - 继续执行直到当前函数返回;
- q(uit) - 退出调试器。