`
ueseu
  • 浏览: 12558 次
  • 性别: Icon_minigender_1
  • 来自: 福建
最近访客 更多访客>>
社区版块
存档分类
最新评论

发一个取得函数调用堆栈的函数

 
阅读更多
代码如下:
js 代码
 
  1. function getCallStack(){  
  2.     var fn, stack;  
  3.     if(arguments.length != 2){
  4.         fn = arguments.callee.caller;
  5.         stack = [];  
  6.     }else{  
  7.         fn = arguments[0];             
  8.         stack = arguments[1];  
  9.     }  
  10.     var fCaller;  
  11.     if(fn == null){  
  12.         fCaller = "(Top Caller)";  
  13.         stack.unshift(fCaller);  
  14.         return stack;  
  15.     }else{  
  16.         var params = /(function\s*([^\(]*)\s*\((.*)\))/.exec(fn.toString());  
  17.         if(params != null){  
  18.             fCaller = params[1];//"function " + params[1] + "(" + params[2] + ")";  
  19.         }else{  
  20.             var fnn = fn.toString();  
  21.             fnn = fnn.substring(0, fnn.indexOf("\n")==-1 ? 25 : fnn.indexOf("\n"));  
  22.             fCaller = "Unknown Caller: " + fnn;  
  23.         }  
  24.     }  
  25.     stack.unshift(fCaller);  
  26.     if(fn != null){  
  27.         arguments.callee(fn.caller, stack);  
  28.     }  
  29.     return stack;  
  30. }  

有个缺点: 如果不是通过function A(){}这种方式定义的函数取不到函数名称
分享到:
评论
1 楼 ueseu 2007-07-10  
Function.caller is not part of the ECMAScript standard and is not required in conforming implementations. It should not be used

相关推荐

    C++高效获取函数调用堆栈

    下面将介绍一种高效获取函数调用堆栈的实现方案,该方法功能单一,使用简单,效率较高。 1. 背景知识 要实现高效获取函数调用堆栈,需要了解函数调用堆栈和异常处理的背景知识。 1.1 函数调用堆栈 函数调用堆栈...

    函数递归调用堆栈分析.doc

    在本文中,我们将通过一个例子来说明函数递归调用堆栈分析的过程。该例子是将一个整数从二进制方法转换为可打印的字符方法。我们将使用递归函数来实现这个过程,并分析函数递归调用堆栈的过程。 首先,我们需要了解...

    main函数调用子函数堆栈解析

    函数调用会在内存中创建一个新的堆栈帧,该堆栈帧用于存放函数的实参、局部变量和返回地址等信息。在这个过程中,main 函数如何调用子函数是非常关键的。今天,我们将详细介绍 main 函数如何调用子函数的过程,并...

    通过EBP EIP来找函数调用堆栈

    在计算机科学中,特别是在软件调试和逆向工程领域,理解函数调用堆栈是至关重要的。函数调用堆栈(也称为调用栈或执行栈)记录了程序中函数调用的顺序,这对于追踪代码执行流程,特别是错误定位非常有用。在x86架构...

    JavaScript函数调用堆栈loader

    JavaScript函数调用堆栈是编程过程中非常重要的一个概念,它记录了程序运行时函数的调用顺序。在JavaScript中,每当一个函数被调用,一个新的调用帧(call frame)就会被添加到调用堆栈上,包含了这个函数执行的所有...

    Win32环境下函数调用的堆栈之研究

    在Win32环境下,函数调用涉及到堆栈的操作,这是理解程序执行和内存管理的关键部分。本文将深入探讨这个主题,特别是通过一个简单的C语言示例程序来解析其背后的汇编代码。 首先,我们要明白堆栈是计算机内存中的一...

    linux C用户态调试追踪函数调用堆栈以及定位段错误.docx

    在 glibc 中,还提供了一个示例代码,展示了如何使用 backtrace 函数和 backtrace_symbols 函数来获取当前线程的函数调用堆栈。 在实际应用中,我们可以使用 addr2line 工具来查看函数的调用堆栈,并定位到具体的...

    函数调用堆栈变化分析[参考].pdf

    在计算机科学中,函数调用堆栈(也称为调用栈或执行栈)是程序运行时内存中的一个重要组成部分,主要用于管理函数的调用与返回。本文将深入探讨函数调用堆栈的变化分析,以帮助理解程序执行过程。 首先,我们需要...

    函数调用与堆栈

    每次函数调用都会创建一个新的栈帧,其中包含了传递给该函数的参数、函数的局部变量以及返回地址等信息。函数调用的过程可以形象地理解为在栈顶添加一个新的栈帧,并在函数执行完毕后移除这个栈帧。 栈帧中各元素的...

    堆栈、栈帧与函数调用过程分析

    【应聘笔记系列】堆栈、栈帧与函数调用过程分析,C-C++堆栈指引

    函数调用,参数堆栈等学习资料收集

    函数调用,参数堆栈等学习资料收集 关于函数调用时堆栈的变化分析(转自Jim's blog) - H_S_的学习总结与心得 - 博客园.mht ...函数调用堆栈分析.doc 转贴:关于函数调用的深入分析 百度空间_应用平台.mht

    vc调试技巧之调用堆栈

    其中,“调用堆栈”(Call Stack)是VC调试工具中的一个重要功能,它能够帮助开发者理解程序的执行流程以及当前执行位置。 #### 什么是调用堆栈? 调用堆栈是一种数据结构,用于存储函数调用的历史记录。每当一个...

    个人总结--函数堆栈调用

    在函数调用时,操作系统或运行时环境会使用一个称为调用堆栈(Call Stack)的数据结构来管理函数的执行。每当一个函数被调用时,函数的返回地址、局部变量的值以及其他相关信息会被压入堆栈。当函数执行完毕后,这些...

    调用堆栈的类

    每次函数调用都会创建一个新的堆栈帧,存储参数、返回地址以及局部变量。当函数执行完毕,其堆栈帧会被弹出,控制流返回到调用者。通过遍历这个堆栈,我们可以了解程序的执行路径。 要实现一个获取调用堆栈的类,...

    函数调用过程种种细节分析

    当一个函数调用另一个函数时,当前的堆栈帧(即调用者)被保存,然后创建新的堆栈帧(即被调用者)。这个切换过程确保了每个函数都有自己的工作空间,并且可以正确地恢复调用者的状态。当被调用函数完成并返回时,...

    利用 RtlWalkFrameChain 回溯调用堆栈

    调用堆栈是程序执行过程中函数调用关系的记录,每一个函数调用都会在堆栈上留下一个帧(frame),包含了返回地址、局部变量等信息。RtlWalkFrameChain函数能够遍历这些帧,从而让我们知道函数是如何被调用的,以及...

    函数调用中堆栈的个人理解共4页.pdf.zip

    2. **调用堆栈(Call Stack)**:在程序运行时,每个线程都有一个调用堆栈,记录了当前执行路径上的所有函数调用。每当一个函数被调用,一个新的栈帧(Stack Frame)会被创建,包含该函数的局部变量、参数和返回地址...

    VC中打印当前调用堆栈信息实例

    在Microsoft Visual C++ (VC) 开发环境中,打印当前调用堆栈信息是一个非常有用的调试技巧,它可以帮助开发者追踪程序执行流程,理解函数调用顺序,尤其是在遇到异常或错误时。下面将详细介绍如何在VC中实现这个功能...

Global site tag (gtag.js) - Google Analytics