debug_backtrace返回调用这个函数的层次关系

debug_backtrace

第一个参数:常量

DEBUG_BACKTRACE_PROVIDE_OBJECT 是否填充 "object" 的索引。
DEBUG_BACKTRACE_IGNORE_ARGS 是否忽略 "args" 的索引,包括所有的 function/method 的参数,能够节省内存开销。 

第二个参数:limit (int) 

 用于限制返回堆栈帧的数量。       默认为 (limit=0) ,返回所有的堆栈帧


返回值

返回一个包含众多关联数组的 array。   以为为有可能返回的元素:

有可能从 debug_backtrace() 返回的元素
名字 类型 说明
function string 当前的函数名,参见:         __FUNCTION__
line integer 当前的行号。参见:         __LINE__
file string 当前的文件名。参见:         __FILE__
class string 当前 class 的名称。参见         __CLASS__        
object object 当前的 object
type string 当前调用的类型。如果是一个方法,会返回 "->"。如果是一个静态方法,会返回 "::"。        如果是一个函数调用,则返回空。
args array 如果在一个函数里,这会列出函数的参数。        如果是在一个被包含的文件里,会列出包含的文件名。 


其实返回的是一个调用层级,先调用的放在在数组的后面(数组小标大);

应用:

1.调试,可以根据调用的流程,知道这个请求的执行流程;

2.当你放在一个公共的函数里,这样就能动态的获取调用这个公共函数的方法名称。

时间: 2024-08-11 04:32:24

debug_backtrace返回调用这个函数的层次关系的相关文章

定义一个返回调用参数函数两次的函数的函数

原题是这样: 定义一个过程 Double, 它以一个有一个参数的过程为参数, Double 返回一个过程, 这一过程将原来那个参数过程应用两次.例如, 若 Inc 是个给参数加一的过程, Double(Inc) 将给参数加二. 那么, 下面的表达式会返回什么值: Double(Double(Double(Inc)))(5) 我当时的思路是: using cint = const int; using iFun = function<int(cint&)>; iFun Double (i

Java调用javascript函数

Java中自带库函数中有ScriptEngine可以支持javascript等script文件 ScriptEngineManager manager = new ScriptEngineManager(); //ScriptEngine可以理解为一个工厂,根据你输入的语言名字,返回调用的函数库. ScriptEngine jsEngine = manager.getEngineByName("javascript"); String jsFileName = "sha256

VC与JavaScript交互(三) ———— CWebPage类调用javascript函数(给js函数传参,并取得返回值)

①需要一个别人写好的类CWebPage,将其对于的两个文件WebPage.h和WebPage.cpp添加到工程中. ②添加WebBrowser控件,在视图/对话框类的头文件中#include "webbrowser2.h",增加成员变量m_webBrowser,调用Navigate()函数加载一个html页面. ③在对话框或者视图的实现文件中,加入#include "WebPage.h",在按钮的响应函数中就可以调用javascript函数了,具体代码如下: CWe

lua调用c++函数返回值作用

2015/05/28 lua调用c++接口,返回给lua函数的是压入栈的内容,可以有多个返回值.但是c++接口本身也是有返回值的,这个返回值也非常的重要,会决定最后返回到lua函数的值的个数. (1)c++自定义类 int Test::getMsg(lua_State* L){ lua_pushnumber(L, 100); lua_pushnumber(L, 200); return 2; } (2)tolua++导出的lua调用的c++接口(部分有修改) int lua_cocos2dx_c

Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

  1.当在一个子类当中调用构造函数,其父类构造函数肯定先被调用.如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始化,所以无法调用子类与之对应的函数.即为指向虚函数表的指针vptr没被初始化又怎么去调用派生类的virtual函数呢?析构函数也相同,派生类先于基类被析构,又如何去找派生类相应的虚函数? 2.做法:将子类的某个函数改为non-virtual,然后在子类构造函数中传递参数给父类函数.然后父类的构造函数

VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)

转自:http://www.cnblogs.com/javaexam2/archive/2012/07/14/2632959.html ①需要一个别人写好的类CWebPage,将其对于的两个文件WebPage.h和WebPage.cpp添加到工程中. CWebPage类头文件和实现文件下载地址: http://download.csdn.net/detail/masikkk/4427190 ②添加WebBrowser控件,在视图/对话框类的头文件中#include "webbrowser2.h&

ZeroMQ接口函数之 :zmq_errno – 返回errno的值给调用此函数的线程

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_errno zmq_errno(3)         ØMQ Manual - ØMQ/3.2.5 Name zmq_errno – 返回errno的值给调用此函数的线程 Synopsis int zmq_errno (void); Description 函数zmq_errno() 会返回errno变量的值给调用此函数的线程. zmq_errno() 函数时为了帮助使用非POSIX系统的用户直接地获取当前er

逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值.

逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值. 在反汇编中,我们常常的会看到各种的函数调用,或者通过逆向的手段,单独的使用这个函数,那么此时,我们就需要认识一下怎么识别函数了. 一丶识别__cdecl 函数(俗称C Call),函数参数,函数返回值 首先写一个C Call的函数 1.返回值 int类型, 参数int 类型 高级代码: int __cdecl MyAdd(int a,int b) { return a + b; } int main(int argc, char* ar

python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): return x**2 y=func(10) print(y) def foo(): return None res=foo() print(res) def foo(): return{'a':1} res=foo() print(res['a']) def foo(): return {'a':1},1,'a',[1,2] res=foo() p