Debugging 最难跟踪的bug类型?

Debugging 最难跟踪的bug类型?,debugging,language-agnostic,testing,Debugging,Language Agnostic,Testing,您必须跟踪和修复哪些最肮脏、最困难的bug?为什么 在我们谈话的过程中,我对这个过程充满了好奇和及膝深度。正如他们所说,苦难就像公司。种族状况和僵局。我做了很多多线程进程,这是最难处理的。跟踪的困难: 一个接一个的错误 边界条件误差 线程错误,尤其是竞争条件。当你无法停止系统(因为bug消失了),事情很快就会变得艰难 错误发生在一台服务器上,而不是另一台服务器上,并且您没有权限对有问题的服务器进行调试 与线程有关的bug : 海森堡缺陷(以海森堡测不准原理命名)是一种计算机缺陷,当试图研究它

您必须跟踪和修复哪些最肮脏、最困难的bug?为什么


在我们谈话的过程中,我对这个过程充满了好奇和及膝深度。正如他们所说,苦难就像公司。

种族状况和僵局。我做了很多多线程进程,这是最难处理的。

跟踪的困难:

  • 一个接一个的错误
  • 边界条件误差

    • 线程错误,尤其是竞争条件。当你无法停止系统(因为bug消失了),事情很快就会变得艰难

      • 错误发生在一台服务器上,而不是另一台服务器上,并且您没有权限对有问题的服务器进行调试
      • 与线程有关的bug
        • 海森堡缺陷(以海森堡测不准原理命名)是一种计算机缺陷,当试图研究它时,它会消失或改变其特征


          缓冲区溢出(在本机代码中)

          当对象被缓存时,它们的equals和hashcode实现实现非常糟糕,以至于hash code值不是唯一的,当它不相等时,equals返回true。

          我的一个朋友有这个错误。他不小心把C程序中的函数参数放在方括号中而不是像这样的括号中:
          foo[5]
          而不是
          foo(5)
          。编译器非常满意,因为函数名是一个指针,索引指针没有任何违法之处。

          错误不在代码本身,而是在您所依赖的供应商模块中。尤其是当供应商反应迟钝,你被迫破解一个变通方案时。非常令人沮丧

          任何基于时间条件的错误。当使用线程间通信、外部系统、从网络读取、从文件读取或与任何外部服务器或设备通信时,通常会出现这些问题。

          去年,我花了几个月的时间跟踪一个问题,该问题最终成为下游系统中的一个bug。来自违规系统的团队负责人一直声称,在我们的处理过程中,这一定很有趣,尽管我们传递了数据,就像他们向我们请求的那样。如果领导更合作一点,我们可能会更快地解决这个错误。

          未初始化变量。(或者现代语言已经解决了这个问题?

          在发布模式下编译而不是在调试模式下编译时发生的错误。

          我们正在开发一个数据库来保存另一种语言的单词和定义。事实证明,这种语言只是最近才被添加到Unicode标准中,并没有被添加到SQLServer2005中(尽管它是在2005年左右添加的)。当涉及到排序时,这产生了非常令人沮丧的效果

          文字和定义都很好,我可以在管理工作室看到一切。但是,每当我们试图找到一个给定单词的定义时,我们的查询都没有返回任何结果。经过长达8个小时的调试,我认为我已经失去了编写简单SELECT查询的能力

          也就是说,直到我注意到英文字母与其他英文字母匹配,再加上任何数量的外国字母。例如,英语单词将匹配E!n@gl##$ish$&Word。(其中!@$%^&*代表外国字母)


          当排序规则不知道某个字符时,它无法对其进行排序。如果它不能对它们进行排序,它就不能判断两个字符串是否匹配(这对我来说是个惊喜)。如此令人沮丧,一整天都在为愚蠢的排序设置付诸东流。

          与机器相关的问题

          我目前正在尝试调试为什么应用程序在try{}catch{}块(是的,在try/catch中未处理)中有一个未处理的异常,该异常只在某些操作系统/机器构建上显示,而在其他操作系统/机器构建上不显示

          相同版本的软件,相同的安装介质,相同的源代码,在某些情况下可以工作-在其他情况下,未经处理的异常应该是代码中处理良好的部分


          Gak.

          对我来说,最令人沮丧的是编译器错误,代码是正确的,但我遇到了一个未记录的问题,或者编译器出了问题。我先假设我犯了一个错误,然后花上几天的时间试图找到它

          编辑:另一个最令人沮丧的是,我把测试用例设置得有点错误,所以我的代码是正确的,但测试不是。那花了好几天才找到


          总的来说,我想我遇到过的最糟糕的错误应该是那些不是我的错。

          涉及各种浏览器O/S配置样式的装饰性web错误,例如,在Firefox和IE的Windows和Mac中,页面看起来很好,但在Safari的Mac上,有些东西会搞砸。有时候这些都很烦人,因为它们需要太多的细节,修改Safari可能会破坏Firefox或IE中的某些东西,因此人们必须小心行事,并意识到样式可能是一系列修复页面的黑客行为。我要说的是,这些是我最讨厌的问题,有时无法修复,因为它们并不被视为重要的问题。

          回到过去,内存泄漏。谢天谢地,现在有很多工具可以找到它们。

          我经常遇到的最难的工具是那些没有显示在任何日志跟踪中的工具。你不应该默默地吃一个例外!问题是,吃异常通常会使代码进入无效状态,随后在另一个线程中以完全不相关的方式失败

          也就是说,我遇到的最困难的一个是函数调用中的C程序,其中调用的签名与被调用的签名不完全匹配(一个是long,另一个是int)。编译时或链接时没有错误,大多数测试都通过了,但堆栈被sizeof(int)关闭,因此堆栈上它后面的变量将随机具有错误值,但大多数时候它工作正常(错误参数后面的值)
          java.lang.NullPointerException 
              at com.google.inject.InjectorImpl.injectMembers(InjectorImpl.java:673) 
              at com.google.inject.InjectorImpl$8.call(InjectorImpl.java:682) 
              at com.google.inject.InjectorImpl$8.call(InjectorImpl.java:681) 
              at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:747) 
              at com.google.inject.InjectorImpl.injectMembers(InjectorImpl.java:680) 
              at ...