问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)
不能说所有的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)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)的更多相关文章
- ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑
上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...
- 分享一个UI与业务逻辑分层的框架(一)
序言 .NET(C#)的WinForm如何简单易行地进行UI与业务逻辑分层?本系列文章介绍一个WinForm分层框架,该框架针对WinForm中的TextBox,CheckBox,RadioButto ...
- javascript要不要用来处理业务逻辑
这个问题,我现在才明白该怎样描述这个已经困惑了我很久的问题,在公司做的项目中,js对于数据验证起到了很大的作用,但是这使得整个项目的业务逻辑变得零散,甚至混乱 现在公司里的项目就是这样的.现在再想想, ...
- HL AsySocket 服务开发框架 - 业务逻辑层
一 概述 Socket服务只是提供一个网络传输服务. 业务逻辑层在整体架构中的位置在那里呢,如图: 网络层将解包后的消息包抛至业务逻辑层,业务逻辑层收到消息包后,解析消息类型,然后转入相应的处理流程处 ...
- MyBatis知多少(6)表现层与业务逻辑层
表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...
- Asp.net设计模式笔记之三:业务逻辑层的组织
本章内容要点: 1.Transaction Script模式组织业务逻辑 2.Active Record模式和Castle Windsor来组织业务逻辑 3.Domain Model模式来组织业务逻辑 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2) ...
- FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...
- .Net高级进阶,在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码?
本文将通过场景例子演示,来通俗易懂的讲解在复杂的业务逻辑下,如何以最简练的代码,最直观的编写事务代码. 通过一系列优化最终达到两个效果,1.通过代码块来控制事务(分布式事务),2.通过委托优化Tran ...
随机推荐
- Ubuntu下hadoop2.4搭建集群(单机模式)
一 .新建用户和用户组 注明:(这个步骤事实上能够不用的.只是单独使用一个不同的用户好一些) 1.新建用户组 sudo addgroup hadoop 2.新建用户 sudo adduser -in ...
- 基于Cocos2dx开发卡牌游戏_松开,这三个国家
1.它实现了动态读取地图资源.地图信息被记录excel桌格.假设你想添加地图,编者excel导入后CocoStudio数据编辑器,然后出口到Json档,到项目的Resource文件夹下. 2.SGFi ...
- C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。
原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...
- HttpClient使用具体解释
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,添加�了易用性和灵活性(详细差别,日后我们再讨论),它不仅是client发送Http请求变得e ...
- emeditor 配置教程
1.众多的图形界面配置功能 通过查看EmEditor的安装目录,可以发现,EmEditor有几个配置文件,理论上应该可以通过修改配置文件来达到配置EmEditor的目 的.然而,打开配置文件一看,如果 ...
- Java Swing 绝对布局管理方法,null布局(转)
首先把相关容器的布局方式设为 setLayout(null); 然后调用组件的 setBounds() 方法 设置button的位置为(100,100) 长宽分别为 60,25 jButton.se ...
- Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
1.错误描写叙述 信息: Setting autowire strategy to name 2014-7-13 1:37:43 org.apache.struts2.spring.StrutsSpr ...
- STM32本学习笔记EXTI(外部中断)
参考资料:STM32数据表.网络信息 =========================================切割线===================================== ...
- 每天进步一点点之SQL 获取表中某个时间字段离当前时间最近的几条
实际中用到的SQL: select * from (select top 3 Id, case when startSignup>GETDATE() then '敬请期待' when (star ...
- 最简单的视音频播放演示样例8:DirectSound播放PCM
===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...