• JS的错误快速定位JavaScript调试技巧


    在网页编写中使用javascript是很常见的事情。但是js程序的调试是相当郁闷的。javascript是一种弱类型的脚本语言,很多错误是无法控制的。当javascript出现问题时,在IE浏览器中只会弹出一个简单的错误提示对话框,IE报的错误往往莫名其妙。
    javascript的错误定位非常令人头疼,如何快速地定位JS错误呢?本文教你快速定位JS错误。
    编写过JavaScript的开发人员都知道,js错误的是很难定位的,总是报一个缺少对象等错误,报出错误的页面和行数又不对,很难定位问题位置。在这里我将介绍一个简单有效的JS错误的方法:
    使用onerror 事件,这是一种标准的在网页中捕获Javascript 错误的方法。 只要页面中出现脚本错误,就会产生onerror 事件。
    如果需要利用onerror 事件,就必须创建一个相应处理错误的函数,。
    window.onerror = function(sMessage,sUrl,sLine){
    //出错处理
    return true
    }
    window.onerror有三个参数:
    1>sMessage是错误信息
    2>sUrl是发生错误的页面的URL
    3>sLine是发生错误的代码行(如果是当前页的错误,行数是准确的,如果不是当前页面的错误,则行数往往会上下错开一行。)
    onerror的返回值决定了浏览器是否显示一个标准出错信息。如果你返回的是false,浏览器将在JavaScritp的console里显示标准出错信息。如果返回true, 浏览器则不会显示标准出错信息。
    当然这些信息还不够充分,其实我们可以获取更多的提示信息,譬如错误的函数调用堆栈。
    下面给出一段示例代码如下:
    //错误信息显示函数
    function reportError(sMessage,sUrl,sLine) {
    var str = “”;
    str += ” 错误信息:” + sMessage + “\n”;
    str += ” 错误地址:” + sUrl + “\n”;
    str += ” 错误行数:” + sLine + “\n”;
    str += “<=========调用堆栈=========>\n”;
    var func = window.onerror.caller;
    var index = 0;
    while(func!=null){
    str += “第” + index + “个函数:” + func + “\n”;
    str += “第” + index + “个函数:参数表:”
    for(var i=0;i ????)
    str += func.arguments[i] + “,”;
    }
    str += “\n===================\n”;
    func = func.caller;
    index++;
    }
    alert(str);
    return true;
    }


    //浏览器是否显示标准的错误消息,取决于 onerror 的返回值。如果返回值为 false,则在控制台 (JavaScript console) 中显示错误消息。反之则不会。
    window.onerror = reportError;
    这样就拿到了函数的调用堆栈,以及每个函数的参数值,可以更好地定位JS错误。
    注意:onerror事件必需在此网页中其它Javascript程序之前!

            function reportError(sMessage, sUrl, sLine) {
                var str = "";
                str += " 错误信息:" + sMessage + "\n";
                str += " 错误地址:" + sUrl + "\n";
                str += " 错误行数:" + sLine + "\n";
                str += "<=========调用堆栈=========>\n";
                var func = window.onerror.caller;
                var index = 0;
                while (func != null) {
                    //str += "第" + index + "个函数:" + func + "\n";
                    //str += "第" + index + "个函数:参数表:"
                    //for(var i=0;i<func.arguments.count;i++)
                    //str += func.arguments[i] + ",";
                    //}
                    str += func;
                    str += "\n===================\n";
                    func = func.caller;
                    index++;
                }
                alert(str);
                return true;
            }
           
            window.onerror = reportError;

  • 相关阅读:
    android中textview字数过长解决方法
    Android的EditText无法自动弹出输入法问题 .
    android中dip、dp、px、sp和屏幕密度
    android横竖屏切换 判断activity 是横屏还是竖屏
    设置ListView中图片的大小大方法 Android
    TextView属性详细分析
    ArcGIS API For Silverlight 实例分析
    Visual Studio 2008 里修改数据库表结构报错 解决办法
    未能加载文件或程序集“xxx”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集
    SuperMap iClient 6R for Silverlight 产品简介及Beta测试软件下载地址
  • 原文地址:https://www.cnblogs.com/icedog/p/1797142.html
Copyright © 2020-2023  润新知