手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:debug

如何调试JS错误

做网页开发的时候不可避免会用到JS,当然更不可避免的就会遇到JS错误。当你打开网页时,IE左下角的感叹号是不是让你很郁闷?怎么调试就成了必修课了。

一般来说,IE的出错信息还是能够基本定位到代码中,FF的相对定位的就更准确一些。只是有时候IE报错为0行或者N行(这个N超出了页面行数)时,就比较让人郁闷。而更头疼的是,如果这个代码在FF完全正常,那真是想死的心都有了。

IE下面,可能更多的时候还是利用微软自己提供的工具来进行查错:ms script debugger,只是知道的人很少,用的人更少。现在firebug lite已经登录IE平台(其实也不算是登录,只是加载firebug lite类库而已。不过,这已经能解决大部分问题了)。FF下面嘛,那就主推firebug,随着firebug的流行,一些附加的东西都有了,如firephp,firecookie,eventbug等插件也越来越让人离不开它。safari和chrome这些基于webkit的浏览器。也都有着自带的js调试工具,可用性我就不太清楚了。没用过,更多的时候只保证IE和FF正常就OK了。webkit虽然份额随着国内所谓双核浏览器的开发而增长的较快,但真正的使用者还仅限于那一小撮人群而已。

于是,这,又成了firebug等的天下(IE8已经自带调试工具,快捷键与firebug一样,界面差不多)。

不废话,下面是我转贴的文章,介绍了一些常见的调试方法,其实也不能算是调试,也可以说是代码的一些写法罢了。【略做整理】

A  使用alert() 和document.write() 方法监视变量值
如果要中断代码的运行,监视变量的值,则使用alert() 方法;
如果需要查看的值很多,则使用document.write() 方法,避免反复单击“确定”按钮;
 
B  使用window.onerror 事件
当页面出现异常时,onerror 事件会在window 对象上触发。它能在一定程度上告诉开发者相关的错误信息。
示例:

JavaScript代码
  1. <script type="text/javascript">  
  2.   function myerror(_message,_url,_line)  
  3.   {  
  4.      alert("错误信息:" + _message  
  5.           +"\n错误的URI:" + _url  
  6.           +"\n错误的行数:" + _line  
  7.      );  
  8.   
  9.      return true//屏蔽系统的事件  
  10.   }  
  11.   //绑定错误事件  
  12.   window.onerror = myerror;  
  13.   
  14.   //触发错误示例:  
  15.   window,onload = test;  
  16. </script>  
注意:在IE 中,触发error 事件后,正常的代码会继续运行,所有的变量和数据都会保存下来,在其onerror 事件处理方法中可以正常访问到;而在Firefox 中,触发error 事件后,一切都结束,所有的变量和数据都将被销毁。
 
C  使用 try...catch 语句找错误
示例:
JavaScript代码
  1. <script type="text/javascript">  
  2.   try  
  3.   {  
  4.       alert(触发异常);  
  5.   }  
  6.   catch (_ex) //可以省略“_ex”参数  
  7.   {  
  8.      var err = "错误信息";  
  9.      for (var i in _ex)  
  10.      {  
  11.         err += "\n参数名:" + i  
  12.              + "\t参数值:" + _ex[i];  
  13.      }  
  14.      alert(err); //打印错误  
  15.   }  
  16.   finally  //finally 可以被省略...  
  17.   {  
  18.      alert("finally 总是会运行");  
  19.   }  
  20. </script>  

注意:try...catch 并不能很好的处理JavaScript 的语法错误。
示例:
JavaScript代码
  1. <script type="text/javascript">  
  2.   try  
  3.   {  
  4.       alert("触发语法错误")); //多了半边“)”  
  5.   }  
  6.   catch (_ex) //可以省略_ex参数  
  7.   {  
  8.      var err = "错误信息";  
  9.      for (var i in _ex)  
  10.      {  
  11.         err += "\n参数名:" + i  
  12.              + "\t参数值:" + _ex[i];  
  13.       }  
  14.      alert(err); //打印错误  
  15.   }  
  16. </script>  
该示例并没有进入catch 块中。
 
D  使用相关调试器
在IE 和Firefox 浏览器中,可以使用相关的调试器或插件对JavaScript 进行调试。
 
●  在Firefox 浏览器中,可以使用其自带的“错误控制台”。操作步骤如下:
      打开Firefox 浏览器 → 在菜单条“工具”中 → 选择“错误控制台”即可。
     在没有其他插件的情况下,其自带的“错误控制台”是一个非常不错的选择。
 
另外,在Firefox 浏览器中,还有一些很不错的调试器,如:Venkman、Firebug 等。
         Venkman 调试器安装后,可以在Firefox 浏览器 → 在菜单条“工具”中 → 选择“JavaScript  Debugger ”命令启用;
         Firebug 调试器安装后,可以在Firefox 浏览器 → 在菜单条“工具”中 → 选择“Firebug”→ 选择“打开 Firebug”即可;
 
●  在IE 浏览器中,可以使用 Microsoft  Script  Debugger 调试器
       Microsoft  Script  Debugger 是微软随IE 4 一同发布的一个IE插件,可以从微软的官方网站上免费下载。
       下载安装以后,必须将IE 浏览器的调试选项打开才能使用。操作步骤如下:
       1>   打开IE 浏览器 → 选择菜单栏的“工具”→ “Internet 选项”命令 → “高级”选项卡 → 将“禁用脚本调试(Internet Explorer )”复选框中的勾去掉即可。
       2>   当IE 浏览器正在浏览页面时,运行Microsoft  Script  Debugger 调试器工具即可进行调试。
       在Microsoft  Script  Debugger 调试器的 Running  Document 面板中选择开启的页面文件(只读),然后按F9 可以设置断点调试。另外,其Command  Window 面板也是一个很有用的功能,它能在代码断点停止时,在其中输入变量名并回车,便可看到此时变量的值;Command  Window 面板甚至可以接受简单的JavaScript 命令。但Microsoft  Script  Debugger 调试器自身还存在一个bug 问题。

原文出自:http://www.cnblogs.com/xugang/archive/2010/08/05/1793392.html

Tags: javascript, error, debug

工具介绍: 让服务器自动从Hg版本库中下载代码

以前,为了保证本地的代码与服务器一样,一般都是采用sVN+分支,审核并最后推送到服务器的。当然,也有服务器从svn服务器拉数据的时候。当然这样配置起来是有点繁琐,但还算能用。
shawphy推荐的这个工具,感觉好象不错。如果有兴趣,大家可以尝试尝试。
以下就是shawphy写的文章:让服务器自动从Hg版本库中下载代码

每次写完代码,提交到版本库,测试可以执行不会冲突,推到远端代码仓库。之后要发布的话,还要通过FTP上传到服务器上,FTP速度又不很理想,严重影响工作效率。

有没有解决之道?有!

直接让服务器从代码仓库中下载代码不就行了么?代码仓库中已经包含最新代码了,让服务器从代码仓库的服务器远程下载代码,方便快捷全自动!

而且,现在用的是hg,而不是svn。svn有个问题,提交的代码可能是未完成的半成品导致程序无法执行。而hg的好处是半成品可以提交在本地,阶段性成果完成后再往远端代码仓库中提交。

下面就以使用BitBucket为例,其他服务大同小异。

编译 hg

首先需要在服务器端编译一份 hg ,编译起来还是很方便的,直接从官网下载一份源码,解压缩后make && make install 一下就行了。他源码包里的README里就这么写的。

Mercurial/Hg 下载地址

第一次clone

第一次使用需要先clone一份代码仓库到本地,以后就可以简单的使用pull命令获取更新了。
所以第一次使用需要 hg clone <你的仓库地址>
仓库地址可以在 BitBucket里的项目里找到。

编写 PHP

然后在服务器端写一个文件up.php,放在需要更新的目录下面, 如下代码:

  1. passthru("/< hg命令行工具的绝对地址>/hg pull -u https://<你的用户名>:<你的密码>@<你的代码仓库地址>");

以我的空间为例,就是:

  1. passthru("/home/shawphy/bin/hg pull -u https://shawphy:******@bitbucket.org/shawphy/test/");

其中最关键的一步是要把密码也写在URL里,否则的话就得用popen()函数来处理密码交互了,比较麻烦。

这样,只要访问这个php文件,就能更新这个网站了。

配置Hook

然后,只需要在 BitBucket 项目管理中,Admin标签里,右边Additional options/settings面板下找到Services,点进去。然后添加一个POST服务,URL地址就填写你那个PHP文件的地址就可以了。

这样就能实现往代码仓库中提交代码后,网站服务器自动下载并更新代码了。

其他

如果要自己搭建的服务器上配置的话,参考 Hg 官方Wiki

---EOF---
用这种类似的工具的好处就是不怕文件改动再多,也会上传修改后的。如果没有版本控制,恐怕代码会乱的一塌糊涂吧,而且,如果有多人同时修改文件,最后会更迷茫。不过总算有这些解决之道。听说GIT不错,还没有研究过。。。

Tags: program, debug, svn, hg

PHP函数:debug_backtrace()

不知道你的函数在哪里被调用了?没关系。。
不知道你的函数在哪行?哪个方法?哪个参数里被触发?没关系。
请使用 debug_backtrace函数吧。

呵呵,好象广告一样。

看到这个函数,其实是有点意外的,本来是想好好的做一个LOG,然后想用个观察者模式,最初的发现是,如果我不主动将行数、函数名放进参数里,那就很难在处理的时候,得到这些信息,可以让我快带定位。

结果就看到了这个函数:debug_backtrace();

 

Table 1. Possible returned elements from debug_backtrace()

Name Type Description
function string The current function name. See also __FUNCTION__.
line integer The current line number. See also __LINE__.
file string The current file name. See also __FILE__.
class string The current class name. See also __CLASS__
object object The current object.
type string The current call type. If a method call, "->" is returned. If a static method call, "::" is returned. If a function call, nothing is returned.
args array If inside a function, this lists the functions arguments. If inside an included file, this lists the included file name(s).

ChangeLog

 

Version Description
5.1.1 Added the current object as a possible return element.

仔细看看还是挺有必要的,这些参数,对象都非常重要。。
让我很难过的是,看到这些,我还有必要写LOG吗?当然也只是说说,要想让LOG的信息更完整,对于这些取回来的信息,还是需要作进一步处理的

Tags: php, debug, trace