[JavaScript] 开发时期如何Debug使用Jscex开发的程序

在前一篇文章中,我们介绍了如何使用Jscex进行开发,它可以让我们以同步的方式撰写异步的程序,大幅度增加程序的可读性,

Jscex在开发时期,透过即时的compile程序并执行compile后的程序来运行,(当然在上线时期我们已经预编译过JS文件,不再有runtime编译的性能issue)但也因为这种方式,可能会让很多人想要Debug时无从下手,让我们来看看实际上可能发生的使用情境。

前言

在前一篇文章中,我们介绍了如何使用Jscex进行开发,

它可以让我们以同步的方式撰写异步的程序,大幅度增加程序的可读性,

Jscex在开发时期,透过即时的compile程序并执行compile后的程序来运行,

(当然在上线时期我们已经预编译过JS文件,不再有runtime编译的性能issue)

但也因为这种方式,可能会让很多人想要Debug时无从下手,

让我们来看看实际上可能发生的使用情境。

本次范例使用chrome做为Debug工具

问题点

首先我们使用Jscex撰写一个简单的Ajax Request,

它会向Server端请求使用者数据,而Server端则会回传一个Json格式的使用者数据,

点我看完整范例

var queryAsync = eval(Jscex.compile("async", function () {
    var result = $await($.ajaxAsync({
        url: ‘/WebApi/GetUserData.svc‘,
        type: ‘GET‘,
        dataType: "json"
    }));

    $("span#result").text(result.data.message);
}));

而在以往如果我们想要知道ajax所回传的数据是什么,我们通常会使用Debug Tool下中断点

但当我们实际执行程序的时候发现,程序并不会停留在中段点的地方,

这是因为实际上浏览器真正执行的,是compile之后的程序,不再是原本撰写的程序,

所以并不能直接用设定中段点的方式来Debug,我们可以利用其他的技巧来进行Debug

使用console.log进行Debug

console.log是我们在Debug javascript时很常使用的function,

我们可以修改程序,在接受到回传值后使用console.log打印出回传的对象

var queryAsync = eval(Jscex.compile("async", function () {
    var result = $await($.ajaxAsync({
        url: ‘/WebApi/GetUserData.svc‘,
        type: ‘GET‘,
        dataType: "json"
    }));

    console.log(result);

    $("span#result").text(result.data.message);
}));

同时我们再打开chrome的Debug Tool,切到Console Tab并重新执行程序

我们可以发现使用chrome的debug tool甚至可以完全展开或收合Object,非常的亲切,

如果我们需要显示回传的使用者资讯,只要调用result.data.message就可以取得了!

使用debugger强制中断

若今天我们并不想用使用console.log,而是希望程序可以透过debug tool,

确实的中断在我希望停止的地方,并且我可以在那个时间点观察我所想查询的各种资讯,

我们可以使用debugger,来让debug tool在执行到debugger的时候强制进入中断点

var queryAsync = eval(Jscex.compile("async", function () {
    var result = $await($.ajaxAsync({
        url: ‘/WebApi/GetUserData.svc‘,
        type: ‘GET‘,
        dataType: "json"
    }));

    debugger;

    $("span#result").text(result.data.message);
}));

打开debug tool并执行网页

我们可以看到不但停在compile后的程序,我们想要中断的地方,

甚至我们可以在这个时间点关查所有想要查看的变量,

是不是很简单呢?

错误提示消息

在写JavaScript的时候,有时候可能会因为笔误,或是没有拦截到预期的异常,

却发现我们的程序没办法work,这时会很仰赖debug tool来查出发生错误的原因,

而Jscex所compile的程序中都会具有Logging机制,

它会拦截compile过的程序之中所发生的exception,并输出Log到console中,(你所遗漏没处理过的exception)

假设今天我们在取ajax回传时不小心笔误少打一个a

var queryAsync = eval(Jscex.compile("async", function () {
    var result = $await($.ajaxAsync({
        url: ‘/WebApi/GetUserData.svc‘,
        type: ‘GET‘,
        dataType: "json"
    }));    

    $("span#result").text(result.dat.message);
}));

我们重新执行程序发现不能work了,这时我们打开console可以看到

如此一来就可以根据message发现,原来是我们的data少打一个a,造成错误导致程序异常

结语

虽然Jscex并不能直接在我们以特殊语法撰写的程序之中设置中断点,

但我们可以利用console.log或是debugger来准确的输出我们想要查询的资讯,

而Jscex也很贴心的在compile后的程序左侧提供原始程序的对照,来方便我们进行Debug,

甚至是在compile后的程序发生并未处理的异常,也可以透过Log来发现,

我们在使用Jscex进行开发时可以利用以上的技巧,根据各人的需要来使用,

也欢迎大家提供自己的Debug方法,请大家多多指教或一起讨论 ^_^

参考数据:

  1. 善用 JavaScript 的 debugger 命令让网页主动进入中断点
  2. 利用Firebug的console功能作JavaScript侦错

原文:大专栏  [JavaScript] 开发时期如何Debug使用Jscex开发的程序

原文地址:https://www.cnblogs.com/chinatrump/p/11516485.html

时间: 2024-10-06 22:26:15

[JavaScript] 开发时期如何Debug使用Jscex开发的程序的相关文章

移动应用跨平台开发:《用PhoneGap来开发跨平台手机应用》

移动应用跨平台开发:<用PhoneGap来开发跨平台手机应用> 随着HTML5, CSS3, Javascript的发展,以及浏览器对这些特性的支持,使得手机跨平台成为一种趋势,跨平台意味着:开发一次,到处运行.基于(HTML5, CSS3, Javascript)的前端开发技术,可以通过PhoneGap(http://phonegap.com/)来生成对应设备的应用,如Android的APK, iOS设备的ipa等.相比原生态的应用来讲,PhoneGap开发出来的应用成本更低,甚至不需要会J

iOS开发中使用宏定义提高开发效率

iOS开发中使用宏定义提高开发效率 (2013-07-10 10:47:33) 转载▼ iOS开发中,巧妙的使用宏定义,可以提高开发效率,本篇简单介绍一下宏的定义,设置,应用,并在未来实践中不断追加一些常用的宏定义. 调试Log iPhone应用程序开发调试的时候,在代码中加入NSLog的暴力调试方法是很频繁的,但是在release的时候要删除这些调试代码,那工作量是烦躁,这样的情况下,试用宏就会显得非常的方便. 看下面的例子: #ifdef DEBUG #define LOG(...) NSL

CSS3实战开发:手把手教你照片墙实战开发

在<CSS3 2D转换技术之translate实战开发>文章中,我给大家列出了CSS3中的2D转换方法: 1.    translate() 2.    rotate() 3.    scale() 4.    skew() 5.    matrix() 同时对第一个方法 translate()做了非常详尽的介绍,并带领大家实战开发了一个导航条.如果你对translate不了解或不是太熟悉,请阅读我的博文 <CSS3 2D转换技术之translate实战开发> . 在讲解知识点之前

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

Java EE开发技术课程第五周(Applet程序组件与AJAX技术)

1.Applet程序组件 1.1.定义: Applet是采用Java编程语言编写的小应用程序,该程序可以包含在HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同.含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet. 1.2.工作原理及优势: 1.2.1  Java Applet 可以大大提高Web页面的交互

编程开发必读书籍:每个Web开发人员都应该阅读的10本书[图]

编程开发必读书籍:每个Web开发人员都应该阅读的10本书[图]:当开发人员问我他们应该阅读哪些书籍的时候,我通常都是告诉他们:让你读的下去的书.许多开发人员会阅读其他人的代码,实际上你提升自己最好的途径就是阅读,你的读书效率越高,那么你在日常工作中的效率也会越高.本文我们将来讨论:每个Web开发人员都应该阅读的10本书:1.<与爱因斯坦月球漫步>为什么推荐一本记忆力训练相关的书籍呢?因为现在的绝大多数开发人员都没有想过要提高自己的记忆能力,结果全部依赖于移动设备,实际上,现如今的程序员很难在脱

【开发记录】微信小游戏开发入门——俄罗斯方块

叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好,但是已经可以让我入门小程序开发了XD. demo地址:https://github.com/nbclw/Laya_Brick 准备 在任何开发前都需要对要开发的东西有一定的了解.准备: 小游戏原理:微信小游戏是属于H5游戏的一种吧,我是这样理解的:在H5中,有一个叫Canvas(画布)的存在,与电脑

10分钟入门微信小程序开发:从环境搭建到开发出第一个程序。

小程序简介 小程序是一种不需要下载安装即可使用的快速应用,它实现了应用“触手可及”的操作:用户扫一扫或搜一下即可打开应用,完全不需要安装,因此小程序不仅可提高的用户的应用体验,也方便应用的传扩散. 本文带大家快速入门小程开发,了解从环境搭建到开发出一个简单hello world程序,从而上手小程序开发,让你快速成功小程序开发人员.之后,想开发什么样的小程序,就可以自己研究和努力了. 下面,是循序渐经的步骤: ?1.注册小程序 在开发之前,当然需要先注册一个小程序账号. 进入“微信公众平台”进行注

微控工具xp模块-开发版[微信(wechat)二次开发模块]

http://repo.xposed.info/module/com.easy.wtool 微控工具xp模块-开发版[微信(wechat)二次开发模块] 基于xposed框架的微信二次开发模块,方便开发者用微信做一些扩展功能(如微信群发.多群直播等...) 目前支持功能: 发文本消息 发图片消息 发语音消息 发视频消息 获取微信好友列表 群列表 支持群发消息 支持消息转发(目前支持文本.图片.语音.视频.图文消息转发) 群管理功能(建群.加人.踢人.设置公告.改群名.退群.解散群) [注:本模块