不能说所有的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 > 15)
{
note.Content = str.Substring(0, 12) + "...";
}
}

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

    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也可以。但那次发现他的那两个参数不一样,改成一样的,就都加载成功了。可能是有的页面有干扰吧。

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

http://www.cnblogs.com/stoneniqiu/p/4925303.html

问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)的更多相关文章

  1. ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑

    上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...

  2. 分享一个UI与业务逻辑分层的框架(一)

    序言 .NET(C#)的WinForm如何简单易行地进行UI与业务逻辑分层?本系列文章介绍一个WinForm分层框架,该框架针对WinForm中的TextBox,CheckBox,RadioButto ...

  3. javascript要不要用来处理业务逻辑

    这个问题,我现在才明白该怎样描述这个已经困惑了我很久的问题,在公司做的项目中,js对于数据验证起到了很大的作用,但是这使得整个项目的业务逻辑变得零散,甚至混乱 现在公司里的项目就是这样的.现在再想想, ...

  4. HL AsySocket 服务开发框架 - 业务逻辑层

    一 概述 Socket服务只是提供一个网络传输服务. 业务逻辑层在整体架构中的位置在那里呢,如图: 网络层将解包后的消息包抛至业务逻辑层,业务逻辑层收到消息包后,解析消息类型,然后转入相应的处理流程处 ...

  5. MyBatis知多少(6)表现层与业务逻辑层

    表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...

  6. Asp.net设计模式笔记之三:业务逻辑层的组织

    本章内容要点: 1.Transaction Script模式组织业务逻辑 2.Active Record模式和Castle Windsor来组织业务逻辑 3.Domain Model模式来组织业务逻辑 ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2) ...

  8. FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

    FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...

  9. .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?

    本文将通过场景例子演示,来通俗易懂的讲解在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码. 通过一系列优化最终达到两个效果,1.通过代码块来控制事务(分布式事务),2.通过委托优化Tran ...

随机推荐

  1. Sandcastle生成帮助文档

    http://www.cnblogs.com/net515/p/3311584.html Sandcastle帮助文档生成器使用介绍 一.软件介绍       Sandcastle是一个管理类库的文档 ...

  2. Oracle 11g client安装和配置。

    数据库和client在不同的机器. 安装前的准备.在安装过程中Oracle数据库server导航到下面的文件夹. 将listener.ora和tnsnames.ora中的host中的localhost ...

  3. mysql回想一下基础知识

    创建数据库 creat table test( #整数通常用于int test_id int, #十进制通常使用decimal test_price decimal, #普通文本通常使用.并使用Def ...

  4. AWR报告生成

    ORACLE数据库两个比較重要的问题查看报告:awrrpt.sql,ashrpt.sql 生成报告的脚本一般存放在例如以下路径: /home/TEST/db/tech_st/11.2.0/rdbms/ ...

  5. 【Web探索之旅】第四部分:Web程序员

    内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...

  6. 水题 hdu1002------用BigInteger解决大数问题

    Problem Description I have a very simple problem for you. Given two integers A and B, your job is to ...

  7. UVA 11769 All Souls Night 的三维凸包要求的表面面积

    主题链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=2869">点击打开链接 求给定的 ...

  8. 使用bootbox.js(二级务必提交书面和数字到数字中国)

    页面文件 <#-- 页头 --> <#assign currNav = "deposit"> <#assign title="网校充值&qu ...

  9. iOS 9 新特性

    这篇文章介绍了iOS9开发相关的简介,现在发布的设备都会搭载iOS9.这篇文章也列出了详细描述新特性的文章. iPad多线程增强 iOS9使用Slider Over, Split View, Pict ...

  10. ios 多线程开发(二)线程管理

    线程管理 iOS和OS X中每一个进程(或程序)由一个或多个线程组成.程序由一个运行main方法的线程开始,中间可以产生其他线程来执行一些指定的功能. 当程序产生一个新线程后,这个线程在程序进程空间内 ...