<?php

/* 使用debug_print_backtrace() 或 debug_backtrace() 打印栈轨迹 */

function fun1() {
print "Hello world!\n";
fun2();
} function fun2() {
Class1::fun3();
} Class Class1 {
static function fun3() {
$class2 = new Class2();
$class2->fun4();
}
} class Class2 {
function fun4() {
debug_print_backtrace();
$backtrace = debug_backtrace();
echo '<pre>';
print_r($backtrace);
}
} fun1();

输出:

Hello world!
#0 Class2->fun4() called at [D:\wamp\www\practise\php\phpcookbook\error\track.php.php:17]
#1 Class1::fun3() called at [D:\wamp\www\practise\php\phpcookbook\error\track.php.php:11]
#2 fun2() called at [D:\wamp\www\practise\php\phpcookbook\error\track.php.php:7]
#3 fun1() called at [D:\wamp\www\practise\php\phpcookbook\error\track.php.php:30]
<pre>Array
(
[0] => Array
(
[file] => D:\wamp\www\practise\php\phpcookbook\error\track.php.php
[line] => 17
[function] => fun4
[class] => Class2
[object] => Class2 Object
(
) [type] => ->
[args] => Array
(
)
) [1] => Array
(
[file] => D:\wamp\www\practise\php\phpcookbook\error\track.php.php
[line] => 11
[function] => fun3
[class] => Class1
[type] => ::
[args] => Array
(
)
) [2] => Array
(
[file] => D:\wamp\www\practise\php\phpcookbook\error\track.php.php
[line] => 7
[function] => fun2
[args] => Array
(
)
) [3] => Array
(
[file] => D:\wamp\www\practise\php\phpcookbook\error\track.php.php
[line] => 30
[function] => fun1
[args] => Array
(
)
)
)

  

参考:

<PHP Cookbook>3'rd  

PHP 使用 debug_print_backtrace() 或 debug_backtrace() 打印栈轨迹的更多相关文章

  1. Java异常的栈轨迹fillInStackTrace和printStackTrace的用法

    本文转自wawlian 捕获到异常时,往往需要进行一些处理.比较简单直接的方式就是打印异常栈轨迹Stack Trace.说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方 ...

  2. 基础知识《十四》Java异常的栈轨迹fillInStackTrace和printStackTrace的用法

    本文转自wawlian 捕获到异常时,往往需要进行一些处理.比较简单直接的方式就是打印异常栈轨迹Stack Trace.说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方 ...

  3. Linux下追踪函数调用,打印栈帧

    事情的起因是这样的,之前同事的代码有一个内存池出现了没有回收的情况.也就是是Pop出来的对象没有Push回去,情况很难复现,所以在Pop里的打印日志,跟踪是谁调用了它,我想在GDB调试里可以追踪调用的 ...

  4. linux内核中打印栈回溯信息 - dump_stack()函数分析【转】

    转自:http://blog.csdn.net/jasonchen_gbd/article/details/45585133 版权声明:本文为博主原创文章,转载请附上原博链接.   目录(?)[-] ...

  5. Atitit java的异常exception 结构Throwable类

    Atitit java的异常exception 结构Throwable类 1.1. Throwable类 2.StackTrace栈轨迹1 1.2. 3.cause因由1 1.3. 4.Suppres ...

  6. Java异常的面试问题及答案-Part 1

    本文由 ImportNew - 韩远青 翻译自 Journaldev. Java提供了一个健壮的.面向对象的方法来处理出现异常,称为Java异常处理.我以前写过一篇长文章来介绍Java异常处理,今天我 ...

  7. 给Lisp程序员的Python简介

    给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...

  8. java 异常处理机制(java 编程思想)

    一.概念 "异常"这个词有"我对此感到意外"的意思.问题出现了,你也许并不清楚该如何处理,但你的确知道不应该置之不理:你要停下来,看看是不是有别人或在别的地方, ...

  9. 《Thinking In Java》阅读笔记

    <Thinking In Java>阅读笔记 前四章:对象导论. 一切都是对象. 操作符. 控制执行流程 public在一个文件中只能有一个,可以是一个类class或者一个接口interf ...

随机推荐

  1. Windows中explorer(图形壳)

    explorer是Windows程序管理器或者文件资源管理器. 用于管理Windows图形壳.(桌面和文件管理.) 删除该程序会导致Windows图形界面无法使用. explorer.exe进程是微软 ...

  2. MiniProfiler(MiniProfiler.EF6监控调试MVC5和EF6的性能)

    git:  https://github.com/MiniProfiler 以前开发Webform的时候可以开启trace来跟踪页面事件,这对于诊断程序的性能是有很大的帮助的,起到事半功倍的作用,今天 ...

  3. servlet 访问流程

  4. selenium常用的js总结

    1. 对input执行输入 直接设置value属性, 此方法主要应对输入框自动补全以及readonly属性的element,sendkeys不稳定 比如: //inputbox is a WebEle ...

  5. C++库(Google Breakpad)

    Google Breakpad是什么? 一个开源的多平台崩溃报告系统. Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,它支持Windows,Linux和Mac和Solari ...

  6. .Net自带缓存Cache的使用

    对于数据比较大,经常要从数据库拿出来用的,可以考虑使用.Net自带的缓存Cache,简单好用: //向内存中插入一个缓存 System.Web.HttpRuntime.Cache.Insert(&qu ...

  7. 如何破解mac版UltraEdit?

    Rodolfo教你如何破解UtralEdit? 第一步:去官网下载原载,先运行一次: 第二步:在终端里执行下面代码就可以破解完成!printf '\x31\xC0\xFF\xC0\xC3\x90' | ...

  8. linux服务器做网关

    首先创建两张路由表,只需要添加到相应的文件中即可,Linux一共支持255个路由表,rt_tables文件中默认已经存在了三张路由表,分别是:   255    local   254    main ...

  9. 【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜

    接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView . 这个名字应该是从 IOS 里的 UITableView来的,其实是跟WP8 ...

  10. java中的权限修饰符的理解

    首先了解概念: 在java中有四种权限修饰符:范围从大到小分别是:public.protect.default(friendly).private,它们之间的区别是: public: Java语言中访 ...