调试:高级与低级错误
Posted
技术标签:
【中文标题】调试:高级与低级错误【英文标题】:Debugging: High-level versus low-level bugs 【发布时间】:2009-11-01 20:52:20 【问题描述】:您通常花费在调试高级和低级错误上的时间的大致比例是多少?
就本次讨论而言,高级错误是诸如不正确的算法、对输入数据和/或操作环境的错误假设、在某些事物的初始实施中被忽略的情况、忘记处理边界条件/边缘案例等。为了讨论,它们还可能包括糟糕的设计决策,这些决策会在代码中引入限制并且更改并非易事,即使这会扩展错误的定义。换句话说,高级错误是由于没有表达你应该的意思而导致的错误。
低级错误是诸如内存管理和损坏问题、不是由高级错误引起的空指针取消引用、通过编译器的细微语法错误、处理数组时出现的错误等。换句话说,它们是由于没有按照您的意思进行编码而导致的错误。
另外,为了比较起见,您主要使用什么语言以及您主要从事什么类型的编程?
【问题讨论】:
我的道歉。但这可能很快就会在“主观和争论”下关闭 @Ravi - 不。不争论。 您的低级和高级错误示例对我来说似乎是矛盾的。例如,您将未处理的边缘情况称为高级错误,但将空指针异常和循环中的非一错误都称为低级错误。我认为这三个都是算法的边缘情况,通常在规范中没有特别提到,或者你称之为高级错误。所有这些通常都是由于开发人员未能正确测试造成的。 如果您想减少调试时间,请查看测试驱动开发(或至少是单元测试)。 【参考方案1】:根据您的定义,我看到的几乎所有错误都是“高级”错误。
我使用 .net 框架在 C# 中工作。该框架几乎可以处理您定义为低级错误的所有内容。
【讨论】:
这正是我要说的。如果您将超过 2% 的调试时间用于此处归类为“低级”的错误,那么也许是时候升级您的工具链了! :)【参考方案2】:低级错误通常仅由编译器修复。因此,首先查看高级错误,然后查看低级错误(如果需要的话)。因为尝试建造建筑物并考虑在弱上建造坚固的墙建造的基地是完全没用的。
这很有趣,但很真实。想想看。
【讨论】:
调试中......哦,我记得我的问题......***.com/questions/1592457/…【参考方案3】:如果我正确理解您的问题,您将错误分为两种类型 - 一种是由不良的编程实践引起的,另一种是由设计和规范中的问题引起的。假设我的理解确实是正确的,我会说作为一名开发人员,我会花更多时间来追踪低级错误,特别是如果它们难以重现(是的,该死的多线程错误只发生在生产中,我正在和你!)。另一方面,设计和规范级别的错误通常会导致项目严重延迟,但更容易在代码中重现和定位。
【讨论】:
但是,如果您在设计本身出现问题或您认为算法错误,又有什么用呢? 在我最近工作的那种商业软件中,有相当多的商业逻辑没有什么意义。有时当我试图推断极端情况下的行为时,我会弄错 - 即不是人们想要的产品。这就是我的意思,而不是完全错误的设计。以上是关于调试:高级与低级错误的主要内容,如果未能解决你的问题,请参考以下文章
Fiddler 高级用法:Fiddler Script 与 HTTP 断点调试