如何通过分割问题 Debug


△向上生长, TO BE TO UP. 程序员的充电站△



如何成为优秀程序员第 3/100 期分享


转载请联系授权(微信ID:qianpangzi0206)


01

调试(Debug)是有趣的



调试是有趣的,因为它一开始是个迷。 你认为它应该这样做,但实际上它却那样做。 很多时候并不仅是这么简单---我给出的任何例子都会被设计来与一些偶尔在现实中会发生的情况相比较。 调试需要创造力与智谋。 如果说调试有简单之道,那就是在这个谜题上使用分治法。 假如,你创建了一个程序,它会依次执行十件事情。 当你运行它的时候,它却崩溃了。 但你本来的目的并不是想让它崩溃,所以现在一个谜题扔给你了。 当你查看输出时,你可以看到序列里前七件事情运行成功了。 最后三件事情在输出里却看不到,所以你的谜题变小了: “它是在执行第8、9、10件事的时候崩溃的”。 你是否可以设计一个实验来观察它是在哪件事情上崩溃呢? 当然,你可以用一个调试器或者我们可以在第8第9件事后面加一些printlining的语句(或者你正在使用的任何语言里的等价的事情),当我们重新运行它的时候,我们的谜题会变得更小,比如“它是在做第九件事的时候崩溃的”。 我发现,把谜题是怎样的一直清楚地记在心里能让我们保持注意力。 当几个人在一个问题的压力下一起工作时,很容易忘记最重要的谜题是什么。

02

调试技术中分治的关键

调试技术中分治的关键和算法设计里的分治是一样的。 你只要从中间开始划分,就不用划分太多次,并且能快速地调试。 但问题的中点在哪里? 这就是真正需要创造力和经验的地方了。 对于一个真正的初学者来说,可能发生错误的地方好像在代码的每一行里都有。 一开始,你看不到一些你稍后开发的时候才会看到的其它纬度,比如执行过的代码段,数据结构,内存管理,与外部代码的交互,一些有风险的代码,一些简单的代码。 对于一个有经验的程序员,这些其他的维度为整个可能出错的事情展示了一个不完美但是有用的思维模型。 拥有这样的思维模型能让一个人更高效地找到谜题的中点。 一旦你最终划分出了所有可能出错的地方,你必须试着判断错误躲在哪个地方。 比如: 这样一个谜题,哪一行未知的代码让我的程序崩溃了? 你可以这样问自己,出错的代码是在我刚才执行的程序中间的那行代码的前面还是后面? 通常你不会那么幸运就能知道错误在哪行代码甚至是哪个代码块 通常谜题更像这个样子的: “图中的一个指针指向了错误的结点还是我的算法里变量自增的代码没有生效? ”,在这种情况下你需要写一个小程序去确认图中的指针是否都是对的,来决定分治后的哪个部分可以被排除。 下一讲: 如何移除错误 相关阅读: 1.比编程语言更重要的是什么? 2.学会 Debug

一个会思考的技术小工

长按扫码关注,每天五分钟和我一起来充电

右下角

给个在看呗

全部评论

相关推荐

面试拷打成m:我感觉他说的挺对的,感觉我找不到工作也要去送外卖了,至少饿不死
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4096次浏览 29人参与
# 你觉得mentor喜欢什么样的实习生 #
10394次浏览 288人参与
# 未岚大陆求职进展汇总 #
23849次浏览 113人参与
# 帮我看看,领导说这话什么意思? #
6307次浏览 26人参与
# 没有家庭托举的我是怎么找工作的 #
12412次浏览 158人参与
# 怎么给家人解释你的工作? #
1425次浏览 16人参与
# 平安产险科技校招 #
2412次浏览 0人参与
# 求职低谷期你是怎么度过的 #
5263次浏览 92人参与
# 26届秋招公司红黑榜 #
12326次浏览 43人参与
# 从哪些方向判断这个offer值不值得去? #
6600次浏览 93人参与
# 同bg的你秋招战况如何? #
158823次浏览 927人参与
# 度小满求职进展汇总 #
10109次浏览 51人参与
# 实习必须要去大厂吗? #
146666次浏览 1541人参与
# 校招泡的最久的公司是哪家? #
4576次浏览 22人参与
# 你有哪些缓解焦虑的方法? #
37177次浏览 835人参与
# 面试紧张时你会有什么表现? #
1705次浏览 21人参与
# 你喜欢工作还是上学 #
77583次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85482次浏览 467人参与
# 秋招想进国企该如何准备 #
97710次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103582次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25034次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28126次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务