您是否曾成为编程语言或技术中的错误的受害者?

时间:2009-10-12 02:30:59

标签: debugging language-agnostic frameworks

当它们是你(或同事)的错误时,很难解决错误。但是,我们都知道,我们用于实施程序的技术是由像我们这样的绝对正确的人编写的。因此,有些人在实施他们使用的工具时会受到漏洞的影响。

那么,您是否在程序中发现了一个由广泛的底层技术(如编程语言或框架)引起的错误?如果是这样,它是否因某些迹象而失败,或是否以静默方式覆盖某些数据?调试有多难?它是否会导致潜在的安全漏洞?您是否可以联系提供商并确认其已修复(或自行修复)?

以下是一些最糟糕的(在我看来)技术中存在一个错误(尤其是一个无声地失败的技术):

  • 编程语言
  • 并发框架
  • 远程API
  • 数据库

8 个答案:

答案 0 :(得分:7)

我每天都会处理一个名为Internet Explorer的内容。

公平地说,所有浏览器都有很多错误。我也为Firefox提交了几个错误,就在前几天我发现了一个奇怪的情况,边框没有考虑填充。

答案 1 :(得分:2)

这是编写大量单元测试的好理由。如果您将平台升级到具有新bug的较新版本,希望您有一个显示错误的测试

在我遇到的一个案例中,供应商正在开发一个全新的API。他们还没有准备好发布新的API,但是他们并不是非常热衷于修复旧版本中的错误,因为他们认为它从$$角度来看已经死了。

答案 2 :(得分:2)

一位同事偶然发现了Jikes Java编译器中的一个错误。他有这样的事情:

if (condition)
{
}
else
{
   System.out.println("Code that does stuff.");
}

他并没有打算永久地将顶部空位留空,而是在开发期间就这样做了。他发现这个条件被忽略了,除非他在那个区块中发表评论,以便它不再是空的。

答案 3 :(得分:2)

在我(主要)使用Java进行开发的过程中,我遇到了以下组件中的错误:

  • Java编译器
    • 这实际上发生了好几次。通常我们发现ecj(Eclipse编译器)和javac(Sun编译器)不同意某些Java代码的有效性。通常我会为两个系统输入错误报告,其中一个被接受而另一个被关闭为无效。
  • 数据库引擎
    • 那些非常罕见且非常非常讨厌,因为没有人希望数据库本身有一个bug。在我们的例子中,它是一个旧产品(错误已在较新的版本中修复),它接受一个不在定义范围内的字段中的值(类似于包含NULL的NOT NULL字段)
  • JDBC驱动程序
    • 由于我一直在研究的项目,有一些错误修复了JDBC驱动程序。错误修复范围从微不足道(“为什么在生产版本中有调试输出?”)到可能 - 甚至不是真正的错误(“你可以通过这样做而轻松安全地进行每次转发 - 并且 - 该“)。
  • JVM实施
    • 这些很难诊断,并且经常表现为在一个JVM上的有效随机崩溃和在另一个JVM上的稳定操作。由于这样的原因,我们暂时多次切换JVM供应商。

在我真正相信它是该组件中的错误之前,每次花费相当长的时间(通常是组件供应商的参与)。

是的:误报的情况(即错误实际上在我/我们的代码中)是更常见的数量级。

第三方组件中错误的唯一地方似乎是Web浏览器。当你说“<插入本周的浏览器> 中的错误时,几乎没有人质疑你,我们需要像这样解决它......”。

答案 4 :(得分:1)

我猜几乎所有使用Internet Explorer编写JavaScript的人都发现他们的程序存在一个由广泛的底层技术引起的错误。

失败的指示是Windows桌面上的蓝色“e”。

答案 5 :(得分:0)

我遇到了gcc 4.4.0的问题,但由于我目前正在开发的产品仍然是pre-alpha,因此在本地修复相当容易。希望他们能尽快解决。

答案 6 :(得分:0)

首先想到的是.NET Framework的第1版;由于某种原因,Random.NextDouble()方法从未产生大于0.5的值。我完全感到困惑,并且已经运行了一个测试应用程序,该方法称该方法成千上万次,我不得不假设它是一个错误并且可以解决它。

从未弄清楚原因是什么......

答案 7 :(得分:0)

我在Mipsel(openwrt)的gcc中发现了一个非常奇怪的错误。我们正在测试一个小应用程序(大约3K sloc)给我sigsev,即使代码在理论上得到纠正。

我不知道bug的细节(我不再使用该代码),但将gcc版本从4.1更改为3.6解决问题。