问题(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 ...
随机推荐
- 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider
原文:重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider [源码下载] 重新想象 Wind ...
- Java、PHP训练场地选择成都传祺播客
传智播客选择九类基础: 1 有不怕炫耀实力,我们会爱一本书,是一个开源项目 2 领先的新技术,让我们的学生走在别人前面,首先推出Hadoop.Unity3D.Nginx. 3 课程广博的知识,深入的技 ...
- centos6.4设备hadoop-2.5.1(完全分布式)
环境介绍: 在这两种装备centos6.4(32位置)的server安装Hadoop-2.5.1分布式集群(2台机器,主要试验用.哈哈). 1.改动主机名和/etc/hosts文件 1)改动主机名(非 ...
- springmvc如何访问静态文件,例如jpg,js,css
你怎么DispatcherServlet拦截"*.do"这有一个后缀URL.就不存在訪问不到静态资源的问题. 假设你的DispatcherServlet拦截"/&qu ...
- 3g自己主动更新网卡驱动web完架构文档
几年前写. 看它是否是用得上 1 简单介绍 本文档具体描写叙述了基于ASP.NET平台和IIS服务的T-Mobile自己主动更新系统的实现框架. 本文档主要从技术架构和业务架构两个方面来着手来描写叙 ...
- MFC调试小技巧
今天看acl源码的时候看到一个函数AllocConsole().百度一下感觉这个函数对于调试非常不错,当然对于MFC里面的调试信息,我都是用TRACE打印自己感兴趣的消息的,而且仅仅有在DEBUG里面 ...
- Streak OpenCart 商城自适应主题模板 ABC-0010
兼容浏览器 IE9, Firefox, Safari, Opera, Chrome OpenCart版本号 OpenCart 1.5.x, OpenCart 1.5.6.x, OpenCart 1.5 ...
- Directx11学习笔记【十四】 使用最新的Effect框架和SDK
由于之前一直在看directx11龙书学习,因此sdk一直用的Microsoft DirectX SDK (June 2010) 版本,最近在stackoverflow上问dx11相关问题时,一直被大 ...
- NET WEB
.NET WEB程序员需要掌握的技能 2015-12-28 08:50 by 敏捷的水, 3997 阅读, 66 评论, 收藏, 编辑 本来这个是我给我们公司入职的新人做一个参考,由于 @张善友 老师 ...
- T4模板合并js
使用T4模板合并js文件 不知道该怎么表达,或许直接贴图贴代码更好 前因:在第一个使用angularjs的项目中我将所有的controller写到一个文件里面,深知维护起来那滋味,所以再次使用angu ...