1.调试基本思路
我觉得调试的基本思路,就是要确立两个元素:
- 可信点;
- 可疑点;
我们一定要首先确定、或者假设一些部分是可信的,一些部分是可疑的。然后在这基础上去编程/笔算出,这种假设下可疑部分的每一步结果应该是怎样的,再用gdb去不断输出结果,和预想进行对比。
例如程序存在两个部分:
- 矩阵乘法;
- 找结果矩阵mc中每行最大值组成数组中的最小值;
我们如果要进行调试,一定要先确定/假设,某一个部分是正确的,错误出现在另一个部分,否则调试是无法进行的。
2.关于可信点
如果可信点都需要假设的话,这种情况下基本是绝境了。最后很可能会发展成这样的情况,可信点为0,整个模块从头到尾都是可疑点,从头到尾逐步调试。。。如果是串行的话还好,我有次调试一个找不到可信点的并行程序,我差点调到崩溃。
所以,种种原因下,可信点的确立基本是必须的。要确立可信点,主要需要采用两种方法:
- 类似迭代开发式的编程方法;
- 用心设计测试案例;
我那次优化矩阵乘法的经历,就存在着测试案例设计的太随便,最后由于浮点数的计算特点,我根本不能确定自己结果的正确,从而心态上崩盘,造成求援惨案。
1624

被折叠的 条评论
为什么被折叠?



