`

打印调用栈的函数print_stack_trace

    博客分类:
  • php
 
阅读更多

打印调用栈的函数print_stack_trace

 

 

	/*
	 * 打印调用栈的信息
	 * @param string $msg 
	 * 需要打印出来的消息
	 * @param function $log_handler
	 * 处理日志的函数,如果为null,则调用print函数打印日志
	 * @param string $endline
	 * 行结束符,如果显示在网页上,可以设置为'<br/>'
	 * @param bool $exit
	 * 打完日志后是否退出程序
	 */
	function print_stack_trace($msg, $log_handler = null, $endline = "\n", $exit=false){
		$trace = debug_backtrace();
		$num = 0; 
		$ans = 'message:'.$msg.$endline.'stact trace back :'.$endline;
		foreach($trace as $line){
			$ans .= '#'.$num.' '.$line['file'].'['.$line['line'].'] ';
			if($line['type'] == '->' || $line['type'] == '::'){
				$ans .= $line['class'].$line['type'].$line['function'].'()';
			}else{
				$ans .= $line['function'].'()';
			}
			if(!empty($line['args'])){
				$ans .= $endline.'parameters:'.$endline.print_r($line['args'], true);
			}
			if(!empty($line['object'])){
				$ans .= $endline.'object:'.$endline.print_r($line['object'], true);
			}
			$ans .= $endline; 
			$num++;
		}
		if($log_handler != null && function_exists($log_handler)){
			$log_handler($ans);
		}else{
			print $ans;
		}
		if($exit){
			exit(1);
		}
	}
 

 

分享到:
评论

相关推荐

    cpp打印调用堆栈

    在这个例子中,`func1`调用了`print_trace`函数,`main`调用了`func2`,所以当程序运行到`print_trace`时,它会打印出调用堆栈,显示`main` -&gt; `func2` -&gt; `func1`的顺序。 然而,这种方法通常只能提供函数地址,而...

    前端项目-stacktrace.js.zip

    stacktrace.js的出现就是为了弥补这一短板,它能够捕获到更精确的调用栈信息,包括函数名、文件名、行号甚至列号,使得开发者能够快速定位问题所在。 stacktrace.js库的使用非常简单,首先,你需要在项目中引入这个...

    StackTraceInC

    当异常被`catch`捕获时,`print_trace`函数会被调用,打印出堆栈跟踪信息,显示出异常发生时的调用顺序。 标签"源代码:C++异常中的堆栈消息打印"暗示了可能有一个实际的代码示例或程序,例如`www.pudn.com.txt`和`...

    Python 如何调试程序崩溃错误

    此函数会打印出当前调用栈的信息,有助于理解代码执行流程。例如: ```python import traceback def sample(n): if n &gt; 0: sample(n - 1) else: traceback.print_stack(file=sys.stderr) sample(5) ``` ####...

    Lua 进阶教程(一)调试

    这个函数会打印出当前的调用栈信息。 - 接着,使用`debug.getinfo(1)`获取当前函数的信息表。参数1表示获取当前函数(即`myfunction`)的信息。 - 最后,打印出"Stack trace end"结束这一段调试输出。 - **输出**...

    coredumper自己实现

    在这些处理函数中,我们可以执行必要的清理工作,并调用`abort()`或`raise()`函数触发`core dump`的生成。 ```c #include void signal_handler(int signo) { // 清理工作... abort(); // 或者 raise(SIGABRT); ...

    Python记录详细调用堆栈日志的方法

    1. **调用堆栈(Call Stack)**:当一个函数被调用时,它会被添加到调用堆栈的顶部。当该函数执行完毕后,它会从调用堆栈中移除。调用堆栈记录了程序执行过程中所有活动函数的信息。 2. **`sys._getframe()`**:这是...

    bochs调试指令指导手册

    - **堆栈信息**: 使用`print-stack`命令可以查看当前调用栈的信息,这对于调试递归函数等问题非常有用。 - **示例**: `print-stack`命令可以帮助开发者了解函数调用顺序和参数传递情况。 ##### 6. CPU状态查看 - **...

    基于golang如何实现error工具包详解

    `genStackTrace`函数中,我们先检查全局配置`config.isPrintStack`,如果需要打印堆栈信息,就调用`runtime`包的函数获取堆栈,并将相关信息写入缓冲区。最后,将缓冲区的内容转换为字符串并保存在`stackTrace`...

    Watchdog, 在主线程上,类用于记录过度阻塞.zip

    print(f"主线程阻塞,持续时间:{event.duration}秒,堆栈轨迹:{event.stack_trace}") # 启动监控 watchdog.start(on_blocking) # 主线程执行任务 # ... ``` ** 结论 ** `Watchdog` 提供了一种实用的方法来...

    Solaris 动态跟踪指南

    操作和子例程部分讲解了DTrace的缺省操作、数据记录操作、tracemem()、printf()、printa()、stack()、ustack()、jstack()等函数的用法,以及如何处理破坏性操作和推理操作。 缓冲区和缓冲部分讲解了DTrace中主体...

    Lua内置的调试器用法详解

    myfunction() -- 调用函数 print(debug.getinfo(1)) -- 获取顶层函数的信息 ``` 运行上述代码后,会输出相应的堆栈跟踪信息和函数信息。 ##### 示例2:访问和修改局部变量 ```lua function newCounter() local n...

    日志规范总结

    2. **输出异常的完整信息**:记录异常时,确保包含完整的StackTrace信息。 3. **避免多次记录日志**:在记录异常信息时,只允许记录一次日志。 4. **避免使用System.print语句**:使用日志框架代替System.print语句...

    lisp二次开发学习资料

    学会使用LISP的内置调试工具,如print、trace、debug等,以及编写单元测试,可以帮助找出并修复代码中的错误。 6. 工具和资源:了解并熟练使用LISP的开发环境和工具,如Emacs和SLIME(Superior Lisp Interaction ...

    Solaris动态跟踪指南(带书签)

    - **stack()**:显示函数调用栈。 - **ustack()**:显示用户空间的函数调用栈。 综上所述,**DTrace** 为 Solaris 用户提供了强大的工具来监控和诊断系统行为。通过灵活地配置探测器、谓词和操作,用户可以深入分析...

    吴泉成投稿1

    此外,了解如何阅读Python的堆栈跟踪(stack trace)也能快速定位错误来源。 掌握Python的错误处理是成为熟练开发者的必经之路。通过学习和实践,我们可以逐步提高对错误的敏感度,减少调试时间,提高代码质量。...

    工业机器人专业英语.pptx

    - **Caller Stack**:调用程序栈,记录程序调用顺序的信息。 - **Safety Configuration**:安全配置,确保机器人操作的安全措施。 - **KUKA Remote Assistance**:KUKA远程助手,远程协助解决问题的功能。 - **...

Global site tag (gtag.js) - Google Analytics