首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

13 年的 Bug 调试经验总结

在《Learning From Your Bugs》一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug。最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可以学习的。...一些最难跟踪的bug有部分是由那些静静失败并扩展而不是抛出错误的代码所导致的。例如,没有检查代码却返回错误的系统调用(如bind)。又如:解析代码在它遇到错误元素的时候只是返回而非抛出错误。...例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本。这个工具使得测试很多边界情况变得容易起来。另一个例子是可以进行API调用的一个命令行工具。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 14.讨论。帮助我最多的调试技术是与同事讨论问题。...首先在修复前运行代码,并观察该bug。然后应用修复并重复测试案例。到此为止错误行为应消失。遵循这些步骤可以确保它确实是一个bug,并且此次修复的确可以解决这个问题。简单而有必要。

72260

13 年的 Bug 调试经验总结

在《Learning From Your Bugs》一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug。最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可以学习的。...一些最难跟踪的bug有部分是由那些静静失败并扩展而不是抛出错误的代码所导致的。例如,没有检查代码却返回错误的系统调用(如bind)。又如:解析代码在它遇到错误元素的时候只是返回而非抛出错误。...例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本。这个工具使得测试很多边界情况变得容易起来。另一个例子是可以进行API调用的一个命令行工具。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 14.讨论。帮助我最多的调试技术是与同事讨论问题。...首先在修复前运行代码,并观察该bug。然后应用修复并重复测试案例。到此为止错误行为应消失。遵循这些步骤可以确保它确实是一个bug,并且此次修复的确可以解决这个问题。简单而有必要。

51620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    13 年的 Bug 调试经验总结

    一些最难跟踪的bug有部分是由那些静静失败并扩展而不是抛出错误的代码所导致的。例如,没有检查代码却返回错误的系统调用(如bind)。又如:解析代码在它遇到错误元素的时候只是返回而非抛出错误。...例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本。这个工具使得测试很多边界情况变得容易起来。另一个例子是可以进行API调用的一个命令行工具。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 14.讨论。帮助我最多的调试技术是与同事讨论问题。...首先在修复前运行代码,并观察该bug。然后应用修复并重复测试案例。到此为止错误行为应消失。遵循这些步骤可以确保它确实是一个bug,并且此次修复的确可以解决这个问题。简单而有必要。...其他观察结果 在这13年来我一直在跟踪我所遇到的最棘手的bug,很多事情由此而改变。我工作过小的嵌入式系统,大的电信系统以及基于web的系统。我使用过C ++,Ruby,Java和Python。

    74350

    13 年的 Bug 调试经验总结

    在《Learning From Your Bugs》一文中,我写了关于我是如何追踪我所遇到的一些最有趣的bug。最近,我回顾了我所有的194个条目(从13岁开始),看看有什么经验教训是我可以学习的。...一些最难跟踪的bug有部分是由那些静静失败并扩展而不是抛出错误的代码所导致的。例如,没有检查代码却返回错误的系统调用(如bind)。又如:解析代码在它遇到错误元素的时候只是返回而非抛出错误。...例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本。这个工具使得测试很多边界情况变得容易起来。另一个例子是可以进行API调用的一个命令行工具。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 14.讨论。帮助我最多的调试技术是与同事讨论问题。...首先在修复前运行代码,并观察该bug。然后应用修复并重复测试案例。到此为止错误行为应消失。遵循这些步骤可以确保它确实是一个bug,并且此次修复的确可以解决这个问题。简单而有必要。

    71960

    13 年的 Bug 调试经验总结

    关于这方面的问题我也没有很好的策略方法,如果各位有的话,还请不吝赐教。 7.日志记录。可视化程序做什么至关重要,特别是当逻辑很复杂的时候。...例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本。这个工具使得测试很多边界情况变得容易起来。另一个例子是可以进行API调用的一个命令行工具。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 14.讨论。帮助我最多的调试技术是与同事讨论问题。...如果bug修复已准备就绪,那就必须进行测试。首先在修复前运行代码,并观察该bug。然后应用修复并重复测试案例。到此为止错误行为应消失。...遵循这些步骤可以确保它确实是一个bug,并且此次修复的确可以解决这个问题。简单而有必要。 其他观察结果 在这13年来我一直在跟踪我所遇到的最棘手的bug,很多事情由此而改变。

    97190

    和各种诡异 Bug 打交道 13 年,我总结了 18 条经验

    作者 | Henrik Warne 翻译 | 郑芸 在《程序员,你会从 Bug 中学习么?》一文中,我写了我是怎样追踪这些年遇到的最有趣 bug 的。...当我们处理这个问题时,我们通常假设它处在空闲列表状态时被标记为断开(但是当时它为什么没有从这个列表上撤下?) 没考虑到事情有时发生过早是由于我们没有想到。 3....所以除非我在重新启动之前测试了100多次,否则在测试时发现不了这个问题。 ? 调试 14. 讨论 在过去对我帮助最大的调试方法就是与同事讨论问题。我常常只要向同事描述问题,就足以认识到问题是什么。...例如,我认为这个问题发生在一个特定的方法中,事实上,这个问题甚至根本不会出现在这个方法中。或者抛出的异常并不是我认为的那个。或者我认为最新版的软件在运行,但它其实是较老的版本。...但是我碰过好多情况下,之所以发生奇怪的问题,是由于不同寻常的配置或意料之外的使用,而我的默认假设是他们是对的,程序是错的。 18. 测试修复的效果 如果你已经修复了 bug,还需要再测试。

    90980

    手把手教你将一个旧的大型项目迁移到 Py

    我们都有使用旧语法的坏习惯,这可以说是教学上的成功了,即使它对代码行的计数没有什么不同,它也被我们用于实验分支: 实验分支 我新建了一个名为“Python 3 ”的分支,并做了以下操作: 在整个代码库上运行...它会在合适的地方修改代码。我经常做完这步后没有进行第一次提交就开始修复代码。这个错误步骤总是让我后悔,不止一次地迫使我重新开始做整件事情。即使这个阶段出错,最好还是先把它提交。...因此将机器和人要做的事情分开显得尤为重要。 将所有用于函数体的依赖项导入到我们还没有修复的 py3。 这里的想法是“run ahead”,即看看如果我们没有使用过时的依赖项,我们会遇到什么问题。...我们必须跳过需要 Cassandra 的测试,同时修复这个依赖项。 我发明了一个有趣的小 hack 来使它发挥作用, 并写了这方面的文章....我们使用 Sentry 来收集奔溃日志,所以很容易查看迁移到 py3 时遇到的所有问题,而且当我们修复了所有的问题时,我们需要再次迁移到 py3,直到我们得到一些问题,如此反复。

    70910

    《周处除三害》之遇到数据库害虫(Bug)怎么破

    当我们使用的是开源数据库时遇到了 Bug,可以提交 Bug 及规避方法给开源社区,等待下一个版本迭代,然后拿到迭代版本来升级,例如 MySQL 8.0.29 出现的严重 Bug,官方紧急下掉了此版本的下载链接...,在 8.0.30 版本中修复了。...如果我们使用的是像Oracle 一样的商用数据库,当我们遇到 Bug 时,通常需要先判断是否可以自己规避掉这个 Bug,如果不能规避,查找官方 MOS 是否有相同的 Bug 及解决方案,如果有解决方案,...11.2.0.4 的 ADG 上也遇到了同样的问题,只不过他这个错误在后台 alert 日志中出现,也不确定是否前端页面或者应用程序中有报错,我这个相当于前端客户端的报错,数据库 alert 日志中却没有报错...版本中出现,在 12.1.0.2 和 12.2.0.1 中得到修复。

    13010

    和各种诡异 Bug 打交道 13 年,我总结了 18 个经验

    即使这通常不会发生,在系统的其他部分(或交互系统)中的bug也会导致它发生。 2.处理太早 这是上述“事件顺序”中的一个特殊情况,但是它已导致了一些棘手的bug,所以它自成一派。...当我们处理这个问题时,我们通常假设它处在空闲列表状态时被标记为断开(但是当时它为什么没有从这个列表上撤下?) 没考虑到事情有时发生过早是由于我们没有想到。...例如,我认为这个问题发生在一个特定的方法中,事实上,这个问题甚至根本不会出现在这个方法中。或者抛出的异常并不是我认为的那个。或者我认为最新版的软件在运行,但它其实是较老的版本。...但是我碰过好多情况下,之所以发生奇怪的问题,是由于不同寻常的配置或意料之外的使用,而我的默认假设是他们是对的,程序是错的。 18.测试修复的效果 如果你已经修复了 bug,还需要再测试。...首先运行修复前的代码,然后观察 bug。然后运用修复再次测试。现在 bug 的问题应该被消除了。继续这些步骤确保它确实是一个 bug,确保你的修复已经修复这个问题。简单但很必要。

    72530

    BUG记录-多线程对事务的影响有多么大?

    问题描述 有一天,测试妹子W向我提了一个BUG,问题描述如下,当操作动作D时,动作D可以看作更新,更新我当前选择的那一条数据,妹子W看到操作D成功页面中多出一条一样的数据,期望的结果是只会更新当前选择行的数据...在我Debug的时候,发现在删除的逻辑上事务有回滚,唯一的是插入数据竟没有回滚,我以为是Mybatis plus有什么特殊的骚操作,原谅当时无知的我,我在Google上找了好多文章就是没找到这个问题产生的原因...最后,只能把这个BUG先放一边,忙着修复其它Bug。...当我把所有的事情都忙完了,我又重新看了动作D的逻辑,看到插入的逻辑,这个插入数据的逻辑我是直接调用同事写好的方法,我看到产生BUG的原因,因为插入的数据有可能有许多,那段的逻辑使用了多线程插入数据。...这个坏习惯影响着我,以后的工作中应该避免这类事情的出现。还有一个问题,就是使用别人的代码一定要看中间的逻辑,别人使用没有问题,并不代表你使用那部分代码也没有问题,所以工作中要仔细。

    49220

    BUG记录-多线程对事务的影响有多么大?

    问题描述 有一天,测试妹子W向我提了一个BUG,问题描述如下,当操作动作D时,动作D可以看作更新,更新我当前选择的那一条数据,妹子W看到操作D成功页面中多出一条一样的数据,期望的结果是只会更新当前选择行的数据...在我Debug的时候,发现在删除的逻辑上事务有回滚,唯一的是插入数据竟没有回滚,我以为是Mybatis plus有什么特殊的骚操作,原谅当时无知的我,我在Google上找了好多文章就是没找到这个问题产生的原因...最后,只能把这个BUG先放一边,忙着修复其它Bug。...当我把所有的事情都忙完了,我又重新看了动作D的逻辑,看到插入的逻辑,这个插入数据的逻辑我是直接调用同事写好的方法,我看到产生BUG的原因,因为插入的数据有可能有许多,那段的逻辑使用了多线程插入数据。...这个坏习惯影响着我,以后的工作中应该避免这类事情的出现。还有一个问题,就是使用别人的代码一定要看中间的逻辑,别人使用没有问题,并不代表你使用那部分代码也没有问题,所以工作中要仔细。

    30820

    嵌入式大牛10年调Bug经验总结

    一些最难跟踪的bug有部分是由那些静静失败并扩展而不是抛出错误的代码所导致的。例如,没有检查代码却返回错误的系统调用(如bind)。又如:解析代码在它遇到错误元素的时候只是返回而非抛出错误。...例如,当我用VoIP SIP协议工作时,我写了一个能够用正是我想要的标题和值回复的小脚本。这个工具使得测试很多边界情况变得容易起来。另一个例子是可以进行API调用的一个命令行工具。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 1.讨论。帮助我最多的调试技术是与同事讨论问题。...我见过很多这样的情况,让我明白,因为不寻常的配置或意料之外的用法而导致不可思议的事情的发生,而我默认的假设是,他们是正确的,程序是错误的。 5.测试修复。如果bug修复已准备就绪,那就必须进行测试。...首先在修复前运行代码,并观察该bug。然后应用修复并重复测试案例。到此为止错误行为应消失。遵循这些步骤可以确保它确实是一个bug,并且此次修复的确可以解决这个问题。简单而有必要。

    45911

    关于野生bug的哭诉

    下面,我将分享一些我个人在编程过程中遇到的技术难题。 1. 野生bug 首先就是bug。我相信每一个程序员都有过与bug斗争的经历。...它们就像隐藏的恶魔,悄无声息地潜伏在我们的代码中,等待着合适的时机出现,让我们的程序陷入混乱。有时候,这些bug非常明显,我们可以迅速找到并修复它。...这个过程可能充满挑战,但当我们最终找到并修复bug时,那种成就感也是无法言表的。 2. 性能优化 性能优化是另一个常见的技术难题。我们的程序不仅需要正确地运行,还需要在合理的时间内运行。...以下是一些我个人在实践中总结出的方法: 学习并掌握基础知识:无论是解决bug还是性能优化,都需要我们对编程的基础知识有深入的理解。这包括数据结构、算法、操作系统、网络等等。...当我们遇到问题时,不要害怕尝试新的方法或思路。即使失败了也没有关系因为失败的经验同样宝贵它可以帮助我们避免重蹈覆辙或者找到更好的解决方案。

    11610

    我发现VSCode有个bug,微软工程师凌晨这样回复...

    不过在找bug和推动修复bug的过程有点意思,「通过一系列尝试最终定位和复现了bug,并且给这个项目的微软官方仓库提了issue,最终在最新版本得到了修复,把这个有趣的过程分享给大家」。...一起来找bug呀 虽然这个插件不是我写的,但我按照一般程序员排查bug的思路,通过下面几个步骤一步步来找到问题原因,最终并推动官方的版本更新来修复,一起来看看吧。 软件问题?...我就尝试不开远程开发模式,把远程Linux机器上的工程直接拉到宿主机本地文件夹,然后用VSCode打开宿主机上的本地工程,「它竟然工作的很好,完全没有出现什么错误提示,到这,已经完全可以确定这个bug只在...关键是「可以看到这个版本的发布时间点刚好是我发现bug的时间」,这回感觉离真相越来越近了,至少在时间上是吻合的有底气了点,那有理由怀疑是这个插件出了问题,回退到上一个稳定版本0.29.0 ?...版本更新 按照最新的1.0.1 版本发布说明,「如果你使用 Linux/MAC 版本的VSCode 或者像我这样用远程开发的方式从宿主机使用Linux版本,可能会遇到我文中说的bug」,我是在0.29.0

    1.1K10

    2019-05-02 如何有效提交 Bug 报告?

    在开始报告错误之前,很乐意分享我的经验给大家做个引导,这样可以使报告 bug 有效,并增加 bug 实际修复的可能性。...具有描述性的标题 环境 预期响应 实际状态 重现步骤 Bug 证明 注:下面的所有示例我都会列出一个实际的 bug,都是我使用 Google 的 Picasa 图片查看器(可惜现已停用)时频繁遇到。...上例包含了 bug 环境并列出了发生的情况。“崩溃”和“窗口关闭”可能是同义的,纳入两个词是以防某些人只用一个短语搜素,而不是另一个。...Bug 的证明或示范 我喜欢记录 bug 的证明,这样可以:1)要求我能够不断重现 bug。2)证明这真的是个 bug,而不是测试者的错误。3)展示清晰的情景以便开发者查看发生了什么。...就是在 Lucid 任职之前,我也经常会给开发者发邮件提 bug。我总是会被收到的回复惊喜到。通常我都会受到回信,并且最终开发者会修复我的 bug,或者与我解释不会(或无法)修复的原因。

    1.1K40

    stash解惑与妙用

    在实际项目开发中,总会遇到代码写到一半(没法去打commit),去开启新的分支 修复 Bug 或者 增加功能 的情况。...应用与实战 假设:正当我在 master 分支上写着文档时候(_没有完成、没有提交_),同事发现 hello.py 这个脚本有问题,紧急报告给我进行修复。...收到报告,下意识就是开一个 debug 分支来处理 bug。但是,现在的文档没完成,自然无法提交,又不能把没提交的东西带入到新创建的 debug 分支(_执意如此,我也没办法 : )_)。...此时,他们的 id 默认都是:stash{0}, stash{1}, stash{2} … … 当我们恢复一个 stash ,并且将它从 stash list 中移除的时候,在其下方的 stash 记录的...所以,当从 stash list 移除一个 stash 后,一些 stash 的 id 就会发生改变。此处是个坑。

    60320

    Git相关介绍

    在Git上,每个工作成员可以任意在自己的本地版本库开启无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用,我可以开一个分支,做我喜欢的事。...打包前需要进行相关配置,如下图所示: 六、bug修复 1.发现的Bug在什么支线修复?...Answer:灰度期间不做冻结,方便开发修复Bug,在正式版发布后对发版支线进行冻结,并Merge代码到Master支线进行备份。 2.上线后发现bug怎么修复?...Answer:在发版分支上修复,并重新打包release分支进行发版。 3.如果发现历史bug,怎么在以前的支线上修复并Merge?...迁移时发现的问题 一、迁移是通过SVN的命令 SVN Git实现的,但是这个命令会自动排查空的文件夹并去除,影响到了输入法模块的逻辑。

    1.2K50

    Django 自动化测试 && 静态文件的引入

    1、首先得有个 BUG   按照我们之前写的这个应用逻辑,当我们访问index这个页面时,我们应该会得到最近发布的五条投票,如果有五条的话。   ...注意:上面描述的确实是一个 BUG,但是还有一个重要的 BUG,就是之前我们再写数据模型时,我们根本没定义任何方法来显示一天内的数据。原谅我没有看到这个要求:Question 是在一天之内发布的。...>>> future_question.was_published_recently() True   很显然现在应用会公开未来的投票,所以我们要修复这个 BUG,哦对了,这不是一个自动化测试,我们只是在交互式环境下测试的...的一个子类 它创建一个特殊的数据库供测试使用 它在类中寻找测试方法——以 test 开头的方法。...,我们不应该显示未来的投票,那么我们在视图显示时,就应该过滤掉过去和未来这个我没有继续研究。

    64010
    领券