`
CshBBrain
  • 浏览: 638030 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:142113
Group-logo
HTML5移动开发
浏览量:135456
社区版块
存档分类
最新评论

显示JavaScript函数调用堆栈的方法

 
阅读更多

显示JavaScript函数调用堆栈的方法

许多大型的JavaScript应用程序间的函数调用关系是非常复杂的,在开发或者调试过程中,经常需要跟踪某个函数是由哪些函数调用后才触发执行的,弄清楚这些函数的调用顺序对我们理解代码的数据流向是非常重要的。

Firebug提供了console.trace()来显示函数堆栈,在需要调试的地方加上下面的一行代码就能显示该函数调用时的上下文关系。IE6就没有这么方便了,它没有提供显示函数堆栈的工具,当不可避免的需要在IE6下调试代码时,使用下面的代码能够显示函数堆栈(建议将下面的JavaScript代码保存为console.trace.js,通过外部引入js的方式引用到页面):

JAVASCRIPT:
  1. /**
  2. * 获取函数名称
  3. *
  4. * @param {Function} func 函数引用
  5. * @return {String} 函数名称
  6. */
  7. function getFunctionName(func) {
  8.     if ( typeof func == 'function' || typeof func == 'object' ) {
  9.         var name = ('' + func).match(/function\s*([\w\$]*)\s*\(/);
  10.     }
  11.     return name && name[1];
  12. }
  13.  
  14. if (!('console' in window)) {
  15.     window.console = {};
  16. }
  17. if (!console.trace) {
  18.     /**
  19.      * 显示函数堆栈<br/>
  20.      * 为了和Firebug统一,将trace方法添加到console对象中
  21.      *
  22.      * @param {Function} func 函数引用
  23.      *
  24.      * @example
  25. function a() {
  26. b();
  27. }
  28. function b() {
  29. c();
  30. }
  31. function c() {
  32. d();
  33. }
  34. function d() {
  35. console.trace();
  36. }
  37. a();
  38.      */
  39.     console.trace = function() {
  40.         var stack = [],
  41.             caller = arguments.callee.caller;
  42.  
  43.         while (caller) {
  44.             stack.unshift(getFunctionName(caller));
  45.             caller = caller && caller.caller;
  46.         }
  47.  
  48.         alert('functions on stack:' + '\n' + stack.join('\n'));
  49.     }
  50. };
分享到:
评论

相关推荐

    JavaScript函数调用堆栈loader

    webpack loader,记录JavaScript函数调用堆栈到字符串window.dxj中,该堆栈可格式化进一步对比分析 也可保存不同时刻的对象进行对比分析

    JavaScript实现显示函数调用堆栈的方法

    本文实例讲述了JavaScript实现显示函数调用堆栈的方法。分享给大家供大家参考,具体如下: 许多大型的JavaScript应用程序间的函数调用关系是非常复杂的,在开发或者调试过程中,经常需要跟踪某个函数是由哪些函数...

    【JavaScript源代码】详解JavaScript中的执行上下文及调用堆栈.docx

    详解JavaScript中的执行上下文及调用堆栈  目录 一、执行上下文是什么二、执行上下文栈是什么三、执行上下文栈的过程细节(一)创建阶段(二)执行阶段 一、执行上下文是什么 二、执行上下文栈是什么 三、执行...

    JavaScript调用堆栈及setTimeout使用方法深入剖析

    Javascript中会经常用到setTimeout来推迟一个函数的执行,如: 代码如下: setTimeout(function(){alert&#40;“Hello World”&#41;;},1000); 会在执行到这句话后延迟1秒钟来弹出alert窗口...这得从Javascript调用堆栈(c

    JavaScript深入编程网页收集

    javascript函数作用域与闭包 - dh20156's New World!_filesjavascript如何避免内存泄露 - - JavaEye技术网站_filesprototype_js深入研究_files从 prototype_js 深入学习 javascript 的面向对象特性 - - AJAX - ...

    hound-trace:JS调用堆栈可视化工具

    欢迎来到猎犬追踪 :waving_hand: JS调用堆栈可视化JS调用栈可视化工具安装安装babel-plugin-hound-trace因为hound-trace实现原理是在函数中注入代码(无变量接收的函数表达式,匿名函数已过滤),所以需要配套安装此...

    JavaScript错误处理和堆栈追踪详解

    有时我们会忽略错误处理和堆栈追踪的一些细节, 但是这些细节对于写与测试或错误处理相关的库来说是非常有用的. 例如这周, 对于 Chai 就有一...当有一个函数被调用的时候, 它就被压入到堆栈的顶部, 该函数运行完成之后,

    call-stack:节点调用堆栈抽象实际上很好

    调用栈 提供易于使用的CallStack抽象,可用于代码反射。 笔记 使用 kuebk/node-stack 作为可选依赖项:这个 dep 可以访问 v8::StackTrace。 如果该依赖项不存在,请使用 Error 进行自省。 每个堆栈帧都应该有一些...

    JavaScript王者归来part.1 总数2

     3.5 定位代码和调用堆栈   3.6 浏览器捕获异常   3.7 总结   第二部分 JavaScript核心  第4章 语言结构  4.1 JavaScript的基本文法   4.2 常量和变量   4.3 表达式和运算符符   4.4 控制语句 句  ...

    Xun Bug:一种工具可以在多种移动浏览器中调试和分析JavaScript-开源

    Xun Bug是用于调试和分析javascript代码的应用程序。 它是一个功能强大的工具,支持大多数移动浏览器... 使用Xun bug的配置文件工具,您可以获取javascript函数调用树和每个调用的时间,还可以获取函数调用的统计信息。

    源文件程序天下JAVASCRIPT实例自学手册

    6.3.3 模拟堆栈和队列操作的方法 6.3.4 使用splice()方法添加和删除数组元素 6.3.5 修改length属性更改数组 6.3.6 调用Array对象的方法生成字符串 6.3.7 连接两个数组 6.3.8 常见属性和方法汇总 6.4 Date对象 6.4.1 ...

    js-stacktrace-testing:JavaScript 堆栈跟踪概念验证测试

    一小部分简单的 JS 脚本,展示了类/构造函数和原型如何将过于简单的对象与堆栈跟踪方面的方法进行比较。 抛出了一个我认为是“嵌套类”以及灵感来自堆栈跟踪的东西。 拆分为同步/异步部分。 不一定有意义,但我...

    tailcall:消除尾部递归函数调用

    这样可以防止使用的调用堆栈过度增长,并且通常可以提高性能(在大多数情况下)。 尾调用优化是ECMAScript 6规范的一部分:ECMAScript 6中的tailcall使用生成并遍历AST。例子输入(尾递归阶乘函数): function ...

    JavaScript基础和实例代码

    6.3.3 模拟堆栈和队列操作的方法 6.3.4 使用splice()方法添加和删除数组元素 6.3.5 修改length属性更改数组 6.3.6 调用Array对象的方法生成字符串 6.3.7 连接两个数组 6.3.8 常见属性和方法汇总 6.4 Date对象 6.4.1 ...

    callsite-record:为错误和函数调用站点创建奇特的日志条目

    为错误和函数调用站点创建奇特的日志条目。 对于错误: 'use strict' ; const createCallsiteRecord = require ( 'callsite-record' ) ; function myFunc ( ) { throw new Error ( 'Yo!' ) ; } try { myFunc ( ...

    CognitiveScale Cortex CLI工具_JavaScript_代码_下载

    调用 [函数名] 部署 [functionName] 删除 [函数名] 堆栈 列表 描述 部署 删除 代理 列表 保存 [agentDefinition] 描述 [代理名称] 删除 [代理名称] 获取快照 [agentName] 创建快照 [snapshotDefinition] 调用 [服务...

    深入理解JavaScript中的尾调用(Tail Call)

    尾调用是函数式编程里比较重要的一个概念,尾调用的概念非常简单,一句话就能说清楚,它的意思是在函数的执行过程中,如果最后一个动作是一个函数的调用,即这个调用的返回值被当前函数直接返回,则称为尾调用,如下...

    调用堆栈任务

    最后,我映射了列表并调用了分页函数,该函数将数字变量逐页设置为当前变量。 对于样式,我使用了引导程序分页样式。 删除“搜索”按钮,并实现一种在用户完成键入后获取数据的机制。 在此任务中,我删除了搜索...

Global site tag (gtag.js) - Google Analytics