Debugging 您是否曾经是编程语言或技术中的bug的受害者?

Debugging 您是否曾经是编程语言或技术中的bug的受害者?,debugging,language-agnostic,frameworks,Debugging,Language Agnostic,Frameworks,当错误是你(或同事)的错误时,解决它们可能非常困难。然而,我们都知道,我们用来实现程序的技术是由像我们这样不会犯错的人编写的。因此,一些人在使用工具的实现过程中受到bug的影响是理所当然的 那么,您是否在程序中发现了由广泛的底层技术(如编程语言或框架)引起的bug?如果是这样的话,它是失败了并有一些指示,还是默默地覆盖了一些数据?调试有多困难?它是否导致了潜在的安全漏洞?您是否能够联系提供商并确认其已修复(或自行修复) 以下是一些最糟糕的(在我看来)有缺陷的技术(尤其是一种无声失败的技术):

当错误是你(或同事)的错误时,解决它们可能非常困难。然而,我们都知道,我们用来实现程序的技术是由像我们这样不会犯错的人编写的。因此,一些人在使用工具的实现过程中受到bug的影响是理所当然的

那么,您是否在程序中发现了由广泛的底层技术(如编程语言或框架)引起的bug?如果是这样的话,它是失败了并有一些指示,还是默默地覆盖了一些数据?调试有多困难?它是否导致了潜在的安全漏洞?您是否能够联系提供商并确认其已修复(或自行修复)

以下是一些最糟糕的(在我看来)有缺陷的技术(尤其是一种无声失败的技术):

  • 程序设计语言
  • 并发框架
  • 远程API
  • 数据库

我想几乎所有使用Internet Explorer编程JavaScript的人都在他们的程序中发现了一个由广泛的底层技术引起的bug


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

我每天都会遇到一个叫做Internet Explorer的问题


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

这是编写大量单元测试的一个很好的理由。如果您将您的平台升级到一个有一些新bug的更新版本,希望您有一个测试来揭示这个bug


有一个例子是,供应商正在开发一个全新的API。他们还没有准备好发布新的API,但他们也不太想修复旧API中的错误,因为他们认为从$$的角度来看它已经死了。

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

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

他本不打算让顶层永远空着,只是在开发过程中就这样做了。他发现该条件被忽略,除非他在该块中添加注释,使其不再为空。

我在gcc 4.4.0中遇到了一些问题,但由于我目前正在开发的产品仍然是pre-alpha,因此很容易在本地进行修复。希望他们能尽快修复它。

首先想到的是.NET Framework的版本1;出于某种原因,Random.NextDouble()方法从未生成大于0.5的值。我完全不知所措,在运行了无数次调用该方法的测试应用程序之后,我不得不假设这是一个bug,并解决它

从来没有发现原因是什么…

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

  • Java编译器
    • 这实际上发生了好几次。通常我们发现ecj(Eclipse编译器)和javac(Sun编译器)对某些Java代码的有效性存在分歧。通常我为两个系统输入错误报告,其中一个被接受,另一个被关闭为无效
  • 数据库引擎
    • 这些都是非常罕见和非常非常讨厌的,因为没有人期望DB本身会有bug。在我们的例子中,是一个旧产品(该错误已在较新版本中修复)接受了不在定义范围内的字段中的值(类似于有一个包含NULL的notnull字段)
  • JDBC驱动程序
    • 由于我一直在做的一个项目,JDBC驱动程序有几个错误修复。bug修复的范围从琐碎的(“为什么在生产版本中有调试输出?”)到可能不是真正的bug(“通过这样或那样做,您可以轻松地确保每条语句的一次往返”)
  • JVM实现
    • 这些问题很难诊断,通常表现为一个JVM上的随机崩溃和另一个JVM上的稳定运行。由于这样的原因,我们临时更换了几次JVM供应商
每次我都花了相当长的时间(通常是组件供应商的参与)才真正相信它是该组件中的一个bug

是的:误报的情况(即错误实际上存在于我/我们的代码中)更为常见


第三方组件中出现bug的唯一地方似乎是web浏览器。当你说“这是一个bug,我们需要像这样解决它…”时,几乎没有人会质疑你。

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


我不知道这个bug的细节(我也不再有那个代码),但是将gcc版本从4.1改为3.6可以解决这个问题。

应该是社区wiki