zoukankan      html  css  js  c++  java
  • 奇怪的BUG

           熟语说“常在河边走,哪能不湿鞋”,在现实中我想说:“代码写多了,总会遇到奇怪的bug”,遇到bug不可怕,可怕的是不自己不知道这么解决,有些bug能当时解决,有些在自己知识水平提高后知道如何解决。还有些依然迷茫,在这做些总结归纳,顺便请教下牛人也是好的。

          一、在一次调试样式的过程中,发现有个button死活不能居中,使用各种设置,如text-align等均无效,而在另一个页面中却很正常,百事不得其解,相同的样式设置但是就是无效,让人摸不住头脑。对于这样的问题,只是单独某个页面会出现,但是有部分页面不出现,那这个问题还是比较好定位的,比较下两个页面的异同就可以了,通过排除各种相关因素后发现,在不能居中的html中少了一个奇怪的头<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">。

          在加上这个头部标签后发现正常显示,最后查找资料才知道这个是有用的信息头部,去掉后的默认版本不一样导致的。但是这个问题比较不容易发现的就是我们一般会将这样的头部去掉,忽略掉这个头部。

          二、我做了个列表,然后想做一个全选的功能,然后就在头部使用一个checkBox来设置,当时的jquery写法是这样的:$(v).attr("checked", true);,当我信心满满的做完后发现一个bug,在我设置为false的时候能够起效果,但是当我设置为true时,下面的列并没有打上勾,然后我跟踪这个元素,发现这个元素的check确实设置为true了。但是就是没有打上勾。一直不明白为什么?通过在网上的列子也是一样的写法,并没有什么问题。那究竟是哪里出了问题。最后请教前段的同事才发现在原来docoment的属性是有两种的。还有一个是设置显示方式的,只有通过这个设置方式:$(v).prop("checked", true);chechBox才能显示打勾的样式。

          ttributes和properties之间的差异在特定情况下是很重要。jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值。例如, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和 defaultSelected 应使用.prop()方法进行取值或赋值。 在jQuery1.6之前,这些属性使用.attr()方法取得,但是这并不是元素的attr属性。他们没有相应的属性(attributes),只有特性(property)。

         三、jquery的日期转换问题。当在chorme中使用new Date("2015-01-01")是没有问题的。但是在IE中会发现并没有转成日期,而是一个undefine,最后发现在IE中这个日期格式是不被认可的。需要使用new Date("2015/01/01")格式。

         四、一个方法耗时方法没有完全执行完全,由于有个方法要给整个公司员工发一封考勤邮件,但是这个方法在实际使用时发现总是执行到一半就中断执行了。通过日志发现这个方法最多只能执行两分钟的时间,然后就引发异常:Asp.Net正在中止线程引发的问题。

         Asp.Net做的一个同步程序,同步的方法是通过JQuery的Ajax调用,同步过程大概要执行20多分钟,程序部署到服务器后执行一段时间后就弹出执行失败的对话框,日志记录的错误信息是“正在中止线程”。

       查错过程:

           1、根据“AspNet 正在中止线程“进行搜索,得到的结果基本都是跟”Response.End“有关的,但我的代码中没有Response.End,所以基本可以排除;

           2、因为使用JQuery的Ajax,所以猜想会不会是因为Ajax超时导致,修改代码将返回状态弹出:发现返回的status为”error“,也尝试过将timeout设置为一个较大值,发现问题依然存在,所以可以排除是JQuery Ajax超时;

           3、使用Fiddler2进行监控,发现执行一段时间后报了500错误,显示的错误详细信息如下图:到了这一步就好办了,可以知道是httpRuntime超时了,配置Webconfig就可以了,如下图:设置好好后发布到服务器,再次运行程序,问题解决。

           奇怪的是在本机运行的时候即使没有设置executionTimeout也不会出现问题,原因是在本机的Webconfig中的compilation节点的有个debug属性设置为true,发布后的Webconfig中的compilation没有debug节点,当debug属性为false时,httpRuntime的executionTimeout属性才会生效。

         五、这个是我到现在也无法解决的问题。我有一个项目使用的是IE8的浏览器,而且不能更换浏览器和系统。但是这个程序在运行中总是会不定时的发生卡顿现象,突然用着的程序被卡着几秒,而且是无规律的的。有的时候严重有的时候没问题。即使是我使用了前台开ActiveX控件来跟踪前台日志也未发现原因,应为在日志中时间总是很正常的。但是具体到使用中就会发现这个bug。这个问题一直困扰着这个项目。后来由于版本升级等原因,到现在依然未能解决。我一直耿耿于怀,因为这个唯一的一个我一直无法搞定的bug,以后估计也不会有机会搞定它了。只能猜测可能跟环境有关系,在大辐射场景工作,还是就是电脑原因。期待点播。

  • 相关阅读:
    Oracle11g口令过期的解决
    小而美的GIF生成神器ScreenToGif
    计算机图形学——区域填充算法(基本光栅图形算法)
    计算机图形学——多边形的扫描转换(基本光栅图形算法)
    计算机图形学——直线扫描转换(基本光栅图形算法)
    计算机图形学——图形和图像
    Java题库——Chapter8 对象和类
    操作系统——死锁的概念以及死锁处理策略
    Java题库——chapter7 多维数组
    Python 词云可视化
  • 原文地址:https://www.cnblogs.com/zuimengaitianya/p/4956481.html
Copyright © 2011-2022 走看看