zoukankan      html  css  js  c++  java
  • javascript调试原理(二) 模拟实现 (转)

     javascript调试原理(一)中讲了javascript的调试原理,本单给出一个javascript调试的客户端模拟实现: 

    Java代码  收藏代码
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    2. <HTML>  
    3. <HEAD>  
    4. <TITLE> New Document </TITLE>  
    5. <META NAME="Generator" CONTENT="EditPlus">  
    6. <META NAME="Author" CONTENT="">  
    7. <META NAME="Keywords" CONTENT="">  
    8. <META NAME="Description" CONTENT="">  
    9. </HEAD>  
    10.   
    11. <BODY>  
    12. <textarea id="jsstr" readonly style="400px;height:200px">  
    13. function test(){  
    14.     var a = test1();  
    15.     var b = test2();  
    16.     var c = "result is " + a + b;  
    17.     alert(c);  
    18. }  
    19. function test1(){  
    20.     return "test1-->abc";  
    21. }  
    22. function test2(){  
    23.     return "test2-->abc";  
    24. }  
    25. test();  
    26. </textarea>  
    27. <div id="result">  
    28.       
    29. </div>  
    30. <script>  
    31. var debugStr = "";  
    32. function jsdebug(resource,line,evalFunc){  
    33.     var lines = debugStr.split("\n");  
    34.     var jsLine = lines[line-1];  
    35.     lines[line-1] = "当前行:--->" + jsLine;  
    36.     var arr = [  
    37.         "调试代码:",  
    38.         lines.join("\n")  
    39.     ];  
    40.     var result = document.getElementById("result");  
    41.     result.innerHTML = result.innerHTML + "<br>执行到第" + line + "行: -->" + jsLine;  
    42.     alert(arr.join("\n"));  
    43.   
    44. }  
    45. function debug(str){  
    46.     var lines = str.split("\n");  
    47.     debugStr = str;  
    48.     var codes = [];  
    49.     for(var i=0;i<lines.length;i++){  
    50.         codes[i] = "jsdebug('test'," + (i+1) + ",function(text){return eval(text)});" + lines[i];  
    51.     }  
    52.     eval(codes.join('\n'));  
    53. }  
    54. debug(document.getElementById('jsstr').value);  
    55. </script>  
    56. </BODY>  
    57. </HTML>  



    只要把其中的alert换成同步的ajax请求,一可以实现每句执行时把当前的行号,context等 信息传给调试服务器。 

    Javascript Debug Toolkit的客户端原理是在这个基础上的,下一篇将展开讲一下这种原理会遇到的问题及解决方法。

  • 相关阅读:
    Hibernate ManyToOne Mappings 多对一关联映射
    CF860E Arkady and a Nobody-men
    23种设计模式(23):代理模式
    23种设计模式(22):享元模式
    23种设计模式(21):外观模式
    23种设计模式(20):装饰模式
    23种设计模式(19):组合模式
    23种设计模式(18):桥接模式
    23种设计模式(17):适配器模式
    23种设计模式(16):状态模式
  • 原文地址:https://www.cnblogs.com/gdutbean/p/2352588.html
Copyright © 2011-2022 走看看