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

13 年 Bug 调试经验总结

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

71760

13 年 Bug 调试经验总结

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

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

    13 年 Bug 调试经验总结

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

    73850

    13 年 Bug 调试经验总结

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

    71360

    你不应该依赖CSS 100vh,这就是原因!

    图片 为什么100vh问题会发生在移动设备上? 这个问题进行了一番调查,发现了其中原因。简短答案是,浏览器工具栏高度没有被考虑在内。...如果你想深入了解为什么发生这种情况,Stack Overflow这个帖子很有帮助。 如何修复移动设备上100vh问题? 第一个建议是尽量少用 vh。...例如,在上面的代码,你可以使用一个 sticky 按钮,避免使用vh单位。...图片 用 fill-available 修复 100vh 问题确实很直接,但在调查这个解决方案时,也遇到过一些问题。 1. HTML类型声明问题 页面上有 <!...一些开发者喜欢根据窗口内部高度定义一个CSS变量,使用该变量来设计他们所需元素。

    1.3K40

    13 年 Bug 调试经验总结

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

    96990

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

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

    70010

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

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

    70630

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

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

    90580

    《周处除三害》之遇到数据库害虫(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 得到修复

    11610

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

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

    30520

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

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

    48720

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

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

    45711

    关于野生bug哭诉

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

    11410

    发现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 就会发生改变。此处是个坑。

    60020

    探究 CSS 混合模式滤镜导致 CSS 3D 失效问题

    这就很蹊跷了,预想混合并没有发生,取而代之是 3D 失效。想,也许与内核有关,上面的效果是 chrome 65.0.3325.181 试验得到。 是否与浏览器内核有关?...随后, chromium bug 提交网站上,找到了 15 年一个 bug 单,也是对这个问题疑问: BUG -CSS mix-blend-mode turns off CSS perspective...翻译一下,意思大概是:当我使用 CSS 混合模式时候,堆叠上下文会重新这个使用了混合模式元素根节点处创建一个独立渲染平面,但是很可惜,这个渲染平面是不支持 preserve-3d (因为它们渲染到单独...上文中 FBO 是什么? 上文 FBO 准确而言是什么也无法 100% 确定,推测应该是 Frame Buffer Object,帧缓存对象,存在于显存。...Bug 何时会被修复 chromium bugs 网站,上述 bug 被合并到 issue 575099,并且最终状态是 Untriaged,表示尚未分配优先级,意思是等待某人确定哪个人应该认领修复该特定错误

    1.1K10

    Git相关介绍

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

    1.2K50
    领券