首页 > 代码库 > Udacity调试课笔记之第四单元追根溯源

Udacity调试课笔记之第四单元追根溯源

第一部分,归纳、推演的艺术

纯闲聊性质。

第二部分,依赖关系

从类型上分为

  1. 控制流依赖关系, 即控制变量值变化的if,while等控制语句
  2. 数据流依赖关系, 即变量值的变化

从方向上看,则分为

  1. 反向依赖。哪些语句会影响这一句的执行。比如,if里的语句就必须先满足if的条件,这是逆向依赖性。
  2. 正向依赖。这一句会影响到后面哪些语句的执行。

从状态就分为

  1. 静态,静态代码分析的结果
  2. 动态,动态日志加原静态依赖关系

不得不说依赖关系这部分确实没什么可说的

第三部分 逆向推导理论

嗯,真的只是理论

镇宅法宝就是 delta调试法–虽然从练习上来说,练习中delta调试法的使用和我想的一点都不一样,感觉和视频里讲的也不一样。

基本思想

  1. 在规定时间,规定地点交待事情,不对,是修改变量的值,修改后,程序继续运行却不会出错,这样我们就找到了一个失败的起因。
  2. 某个执行失败的变量,将值改成执行成功时的值,则这个变量就是失败的起因了。

好吧,第2条是对第1条的补充,不该算作两条。

自动化的基本思想

  1. 在规定地点(指定的代码行上),获取成功、失败的两次执行的状态
  2. 比较两次执行状态,得到差别的集合,即值不同的变量
  3. 使用delta调试法,从这个集合中找出影响测试的最小子集(这里老师又改成使成功的变失败了,能理解,但之前没注意到这里。)

本单元的练习只是求某个或某几个手工指定的时间、地点的最小子集,还没有要求去求出完整的因果链。

不过,可惜的是后面他就没再讲怎么求完整因果链了,本单元2/3课时介绍的内容等于一点都没用上。

原本是用markdown 写笔记的,看来想转到csdn上还是不方便——放github上,估计没什么访问,死要面子活受罪说的就是我了。