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

时间:2019-09-13
本文章向大家介绍[JavaScript] 开发时期如何Debug使用Jscex开发的程序,主要包括[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