ACM头
登入

ACM的通信

kode vicious

离开疯狂的道路


笔记本电脑的人坐在一个巨大的错误上,插图

信用:Sentavio

回到顶部

亲爱的KV,

我刚刚花了一周的大部分时间在一件代码中调试问题,该代码需要程序员(我)重新运行相同的100行代码,添加了越来越多的调试语句,直到错误最终揭示出来为止。由于此特定代码在无服务器环境中,因此不是一个传统的调试器。取而代之的是,我不得不一遍又一遍地又一遍又一遍地发射功能。最终,我的眼睛会釉面,我会站起来,在我的家庭办公室里走动,然后坐下来重新开始。我以某种方式不敢相信这是攻击这样的问题的正确方法,但是当我向团队的其他成员寻求帮助时,他们告诉我tedium是可以预料的。显然不是这样,可以吗?

te绕在tedium

亲爱的蒂德,

这么多陈词滥调与这个话题有关,我觉得我可以在这里引用它们,并将其称为“一天”,但这似乎是懒惰和不公平的。

我们大多数人都知道,计算机一遍又一遍地又一遍又一遍地做同样的事情。在糟糕的日子里,KV觉得这是唯一的计算机实际上是有益的,他被困在超现实的苏斯噩梦景观中,其中奇怪地绘制了鲜艳的,鲜艳的角色,使我的所有代码崩溃,以此方式崩溃显然是不可能的。

调试代码通常是迭代的,并且迭代过程属于重叠类别。您运行该功能,给出错误的输出,挠头,然后思考:“哦,它必须是x”,然后更改X的内容并再次运行它,并获得了另一个错误的结果。然后您想,“哦,不是x,它是y。”然后您更改X,然后尝试Y,再次运行代码,然后…。沿着这条道路是疯狂的,无论有没有微剂量,但这是我们行业中糟糕的道路,我们都走了很多次。

有几种离开这种疯狂之路的策略。

您已经提到了《疯狂道路》的第一条路,那就是使用调试器。不幸的是,世界上很少有好的辩论者,而且程序员很少倾向于改善这种情况,因为(作为任何风险投资者都会告诉您),在软件工具中赚钱的钱很少。

人们可能会认为,我们当中有些在行业中工作的人只会为我们自己的理智而努力,但是正如KV以前指出的那样,程序员是乐观主义者:我们始终认为这次我们已经做好了,我们可以写作。更多的代码,而不是调试我们现在面前的内容。这并不是说没有辩论者。有些人甚至有些工作 - 甚至很少有效 - 但是那些确实很少彼此之间的工作。

当他看到加载的调试陈述的代码时,KV继续磨牙,如果编写代码的程序员可以既有信心并熟练与他们的辩论者有信心,这将是完全不必要的。如果一个人很幸运能够访问一个好的调试器,那应该非常感谢他们通常给予的感谢并使用该死的东西!当KV是一个年轻得多的程序员时,他为老板工作,他坚持首先在调试器中运行所有代码,而当KV可以的时候,这就是他所做的。如果该程序在调试器中运行良好,那么您可以在无需训练轮的情况下尝试一下,并查看如何进行。

另一个偏离疯狂路径,可能与您的无调试器环境最相关的是,在失败函数的每一行中添加某种形式的断言。作为程序员,您当然应该知道该功能应该做什么,因此请断言!好的语言会让您这样做,然后让您从视图中隐藏主张,但是我很少看到一种语言来做到这一点。

更常见的是,有一个断言库或10个库(因为人们是如此懒惰,他们不会在搜索自己的需求之前搜索所需的东西),您可以用来这样做。不要通过仅将断言添加到您认为引起错误的事物中来沿着疯狂的迭代途径。断言函数中的每条爆炸线,然后(如果星星对齐)您会在代码的下一个运行中找到错误,因为您是按线路检查函数的每一点。

最后,如果您正在使用仅失败的功能而战n时代,您将必须利用一个事实,即计算机确实擅长一遍又一遍地做事并自动执行故障功能,以便您可以捕获故障。提高一个级别,编写循环,确保它可以捕获故障,然后返回。

KV

Q ACM队列的邮票相关文章
queue.acm.org

外包责任
kode vicious
https://queue.acm.org/detail.cfm?id=2639483

肆意的调试行为
kode vicious
https://queue.acm.org/detail.cfm?id=2048938

在现场系统上调试
kode vicious
https://queue.acm.org/detail.cfm?id=2031677

回到顶部

作者

乔治·诺维尔·尼尔((kv@acm.org)是Neville-Neil咨询公司的所有人,也是ACM队列编辑委员会。他从事网络和操作系统代码,以获取娱乐和利润,教授各种与编程相关的科目的课程,并鼓励您的评论,嘲笑和代码与他有关通讯柱子。


作者拥有的版权。
请求(重新)向所有者/作者发布(重新)发布

数字图书馆由计算机协会发布。版权所有©2022 ACM,Inc。


找不到条目

登入全面访问
“ 忘记密码? »创建一个ACM Web帐户
文章内容:
Baidu
map