不能说所有的bug都是纸老虎,但往往那种看似很奇葩的bug,导致的原因确实很简单,烦了你一段时间,找到真相又让你忍不住一笑。什么是奇葩的bug呢。我的定义是:代码逻辑都一样,但在A处是好的,到了B处就不行或者同类的ABC都是好的,D却不行了的bug。而最终,问题确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方。

本地都是ok的,服务器还是不行,怪我咯

case1:本地工程改好,推倒服务器上,但一会儿,测试妹妹又叫了,“还是不行,你再看看”。顿时眉头一皱,怎么可能,自己又run一遍,妥妥的啊。然后又到服务器上push下来,跑一遍,也ok啊。唯独ccnet 持续集成编译不能通过。抓耳挠腮的想了半天。发现刚刚运行的都是debug版,而ccnet跑到是Release版本。而正是因为Debug写了些配置,Release却没有写所以错了。

小结:不要从一开始就忙错了,除了debug,Release。git上面还有master,release,prelease,newFunction等诸多版本。这要是改错了可能回导致更大的麻烦。

case2: 按照客户需求改好了功能,放到云服务器上之前,我都会在本地的iis发布确认通过。但有一次突然发现每次访问都要登录认证。就如下图:

明明是设置了可匿名访问,也赋予了IUSR_xxxx ,Everone,各种权限,但就是不行。本地是iis7,服务器上是iis6,这会有什么差别?但是同目录的其他网站都是ok的。我照着正常的网站配置,也不行,重新部署也没有解决。然后各种搜罗,各种看帖,心想肯定还是和权限有关,也许是某个文件,也许是webconfig的配置,但试了发现还是无效。深更半夜,默默和屏幕对视,窗外,秋风乍起,屋里,室友已经熟睡。

突然眼前一亮,有个博客说可能是IUSR_xxx账户没有AD权限,在匿名用户的地方需要设置一个有权限的账户。我换了成xxxx/Adminstrator ,果然好了。但为什么是这样,别的网站的匿名用户是IUSR_xxx都ok,这样会不会有什么问题。现象是解决了,但真正导致的问题还没有找到,或许是某个程序,或许是某个文件。还要继续跟进。

小结:表面上相似的个体,还是有各自的差异性。但这个问题只是解决了现象,没有解决本质。

case3:这个问题真真的是奇葩,同事问我说,他webservice调用不了了。上午还好好的,下午就报407代理错误。但又是那句老话:“我其他的服务都能调用啊,在别的电脑上也能调用,就这台电脑突然不行了” ,我和他测来测去,api本身没有问题,网络没有问题,电脑没有问题,代码也没有问题,因为根本没有进来。那问题在哪?然后他老婆(对,他和他老婆坐一起)无意中在VS中点开了app.config。然后这个文件显示被自动修改了,然后程序就通了。类似问题我也遇到过,我有一个程序是使用 XDocument.Save方法每次去覆盖一个文件,但老是没有成功覆盖,即使vs提示:“文件已被修改,是否重新加载当前文件” 我点确定,还是没有改掉,但我把文件内容删掉。却又可以成功覆盖。然后同事建议我换成 File.WriteAllText方法,就好了。

小结:大家有遇到过么,xml文件没有成功修改。或者是经常变动的文件不适合用xml持久化?

EF开的玩笑

事情是这样,为了让内容在表格中较好的显示,我把内容较长的截取了一下,但是发现,用到的地方都被改变了,但一看数据库又没有改变。

   foreach (var note in notes)
{
var str = CommonHelper.StripHTML(note.Content);
if (str.Length > )
{
note.Content = str.Substring(, ) + "...";
}
}

但是并未保存。但是再捞出一条时,内容却变化了。

    raw = _respository.GetNoteById(id);

但数据库没变变化。

然后重新启动,先访问编辑页面,数据又是正常的,明显受到了前面方法的影响。难道数据被缓存了?后来发现,因为自作聪明搞了个单例,仓库内部的db=xxDB.GetInstance()。结果因为这两个页面都是一个上下文。数据被缓存了下来,导致查询的对象不是来自数据库。这个时候如果保存一下,其他的被缩短的内容也都会被保存到数据库中。而最简单的办法就是 db=new dbcontext();

小结:这纯粹是自己不了解EF的机制导致的麻烦,弄巧成拙。

ckeditor 也不听话

同事做个功能,异步加载一个编辑框,发现有时候能加载成功,有时候不能。有的页面一直可以,有的页面一直不行。

 <textarea class="" name="Content" id="Content">
     CKEDITOR.replace('Content',
{
toolbar: ...
});

其实,对于ckeditor,replace后面的这个参数id也可以,name也可以。但那次发现他的那两个参数不一样,改成一样的,就都加载成功了。可能是有的页面有干扰吧。

命名问题

今天遇到一个,安装包里面有个文件叫driver.config。用来存储驱动集合。前线有人报错说是,装在D盘不行,装在C盘可以。心想这么奇怪,以前是C盘不行,现在变D盘不行。后来过去一看,原来他直接将软件安装到根目录,文件夹都没有。在这种情况下,这个driver.config中的内容为空。也无法重新生成。而安装到某个指定的文件夹就没有问题。看来是系统阻止了写入driver.config的行为。

这件事情有两点教训,1个是命名,要带上软件的前缀,以示区分。2.文件安装最好再套一层。

还有些“神奇现象”,说不出原委,也就不提了。但往往这些bugs会耗费掉我们很多时间。能找到原因的问题,绝大部分会有解决办法。找不到原因的问题,才是不好解决的问题。有时候即使解决了现象,但未必解决了问题的引发的原因,所以我习惯将这些事情都记录下来,出现一次,可能就会出现第二次。此文,献给那些我们调bug的碎片时光。

【月末轻松篇】--- 那些奇葩的Bugs的更多相关文章

  1. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

  2. 跟着未名学Office - 熟练使用WORD

    目录 第一章.Word之编辑篇. 1 第一节 页面布局... 1 第二节 格式编辑... 1 第三节 表.图.域... 5 第四节 审阅.保护... 7 第五节 *插入对像... 9 第二章.Word ...

  3. 移动端input 无法获取焦点的问题

    下午遇到一个问题,移动端的input都不能输入了,后来发现是 -webkit-user-select :none ; 在移动端开发中,我们有时有针对性的写一些特殊的重置,比如: * { -webkit ...

  4. webkit-user-select:none 问题

    webkit-user-select:none 问题 学习了:https://bugs.webkit.org/show_bug.cgi?id=82692 最近两天做移动端游戏举报页面.遇到一个问题,移 ...

  5. mysql server 自动断开的问题

    今天发现mysql的一个问题,当跑update语句的时候,mysql 服务会自动断掉,无论用 phpmyadmin, navicat , mysql workbench 甚至用 mysql命令行效果一 ...

  6. php性能调优

    第一章  针对系统调用过多的优化 我这次的优化针对syscall调用过多的问题,所以使用strace跟踪apache进行分析. 1.  apache2ctl -X & 使用-X(debug)参 ...

  7. PHP性能优化大全

    第一章  针对系统调用过多的优化 我这次的优化针对syscall调用过多的问题,所以使用strace跟踪apache进行分析. 1.  apache2ctl -X & 使用-X(debug)参 ...

  8. React Native 轻松集成分享功能(iOS 篇)

    产品一直催我在 RN 项目中添加分享功能,一直没找到合适的库,今天让我看到了一个插件分享给大家. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台 ...

  9. React Native 轻松集成统计功能(Android 篇)

    关于推送的集成请参考这篇文章,本篇文章将引导你集成统计功能,只需要简单的三个步骤就可以集成统计功能. 第一步 安装 在你的项目路径下执行命令: npm install janalytics-react ...

随机推荐

  1. Android框架之AndroidAnnotations详细讲解

    一: (1)一个activity如过使用AndroidAnnotions注入时, 那么它在 AndroidManifest.xml注册时,应该加入_ 比如: MainActivity的注册时 < ...

  2. vim深入研究

    About VIM--Unix及类Unix系统文本编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇 ...

  3. phantomjs和angular-seo-server实现angular单页面seo

    1.下载phantomjs,并配置环境变量为   eg:E:\phantomjs-2.1.1-windows\bin 2.下载angular-seo-server 3.windows下:cmd eg: ...

  4. bind原理 附带上自己的一些理解 (引自javascript设计模式和与看法实践)

      Function.prototype.bind = function(){ //this指向的是所有由Function构造器产生的函数 var self = this, // 保存原函数 //[] ...

  5. Hibernate缓存之Aop+cache

    在上一篇涉及到查询缓存的功能时除了需要在配置文件中开启缓存外,还需要在业务代码中显示调用setCacheable(boolean)才可以打开查询缓存的功能,这样做,无疑是破坏了封装性,所以就诞生了利用 ...

  6. C#实现:给定任意数字,输出在该数字下所有()括号的集合

    class Program { static void Main(string[] args) { getPairs(, , , , ""); Console.ReadKey(); ...

  7. Apache 网站301重定向

    1. Apache模块 开启rewrite 2..htaccess文件中 <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteE ...

  8. Linux SVN 命令详解(zz)

    Linux下常用SVN命令 2012-04-02 11:46:00 标签:服务器 目录 Linux checkout linux系统 1.将文件checkout到本地目录 svn checkout p ...

  9. MvcPager 免费开源分页控件3.0版发布!

    MvcPager 3.0版在原2.0版的基础上进行了较大的升级,对MvcPager脚本插件重写并进行了大量优化.修复了部分bug并新增了客户端Javascript API等功能,使用更方便,功能更强大 ...

  10. 最常用的reset代码

    /*css reset code */ /**** 文字大小初始化,使1em=10px *****/body { font-size:12px;} /*字体边框等初始化*/body,div,dl,dt ...