应用场景
有的时候调试框架业务代码,尤其是框架代码,非常麻烦,你从入口文件开始调试,可能要跑几十个文件才能到达你最后书写逻辑的控制器,流程类似
A->B->C->D->E->F->G->H->I->J->K (K代表最终执行的控制器方法)
那我就快速知道是哪个地方调用了K方法,K的上级调用栈有哪些,就可以使用debug_backtrace,以Laravel框架为例,打开debug_backtrace(2)以后,可以看到上级调用栈有43个,具体是从从哪一行的哪个方法调用类进来的一目了然,也方便调试
函数原型
debug_backtrace ( int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT , int $limit = 0 ) : array
// debug_backtrace() 产生一条 PHP 的回溯跟踪(backtrace)。
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) 等同于 `debug_backtrace(2)`
这个函数有俩参数
截至 5.3.6,这个参数是以下选项的位掩码:
- options
- DEBUG_BACKTRACE_PROVIDE_OBJECT 是否填充 “object” 的索引。
- DEBUG_BACKTRACE_IGNORE_ARGS 是否忽略 “args” 的索引,包括所有的 function/method 的参数,能够节省内存开销。在 5.3.6 之前,仅仅能使用的值是 true 或者 false,分别等于是否设置 DEBUG_BACKTRACE_PROVIDE_OBJECT 选项。
- limit
- 截至 5.4.0,这个参数能够用于限制返回堆栈帧的数量。 默认为 (limit=0) ,返回所有的堆栈帧。
示例
下面以Laravel框架为例,我在IndexController中打印了一下这个方法,由此可以找到在IndexController之前的所有调用链路,也便于快速排查问题
Array
(
[0] => Array
(
[function] => index
[class] => App\Http\Controllers\IndexController
[type] => ->
)
[1] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Controller.php
[line] => 54
[function] => call_user_func_array
)
[2] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php
[line] => 45
[function] => callAction
[class] => Illuminate\Routing\Controller
[type] => ->
)
[3] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php
[line] => 239
[function] => dispatch
[class] => Illuminate\Routing\ControllerDispatcher
[type] => ->
)
[4] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php
[line] => 196
[function] => runController
[class] => Illuminate\Routing\Route
[type] => ->
)
[5] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php
[line] => 685
[function] => run
[class] => Illuminate\Routing\Route
[type] => ->
)
[6] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 128
[function] => Illuminate\Routing\{closure}
[class] => Illuminate\Routing\Router
[type] => ->
)
[7] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php
[line] => 41
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[8] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Routing\Middleware\SubstituteBindings
[type] => ->
)
[9] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php
[line] => 77
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[10] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
[type] => ->
)
[11] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php
[line] => 49
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[12] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\View\Middleware\ShareErrorsFromSession
[type] => ->
)
[13] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php
[line] => 116
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[14] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php
[line] => 62
[function] => handleStatefulRequest
[class] => Illuminate\Session\Middleware\StartSession
[type] => ->
)
[15] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Session\Middleware\StartSession
[type] => ->
)
[16] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php
[line] => 37
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[17] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse
[type] => ->
)
[18] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php
[line] => 67
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[19] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Cookie\Middleware\EncryptCookies
[type] => ->
)
[20] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 103
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[21] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php
[line] => 687
[function] => then
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[22] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php
[line] => 662
[function] => runRouteWithinStack
[class] => Illuminate\Routing\Router
[type] => ->
)
[23] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php
[line] => 628
[function] => runRoute
[class] => Illuminate\Routing\Router
[type] => ->
)
[24] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php
[line] => 617
[function] => dispatchToRoute
[class] => Illuminate\Routing\Router
[type] => ->
)
[25] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php
[line] => 165
[function] => dispatch
[class] => Illuminate\Routing\Router
[type] => ->
)
[26] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 128
[function] => Illuminate\Foundation\Http\{closure}
[class] => Illuminate\Foundation\Http\Kernel
[type] => ->
)
[27] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php
[line] => 21
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[28] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Foundation\Http\Middleware\TransformsRequest
[type] => ->
)
[29] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php
[line] => 21
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[30] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Foundation\Http\Middleware\TransformsRequest
[type] => ->
)
[31] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php
[line] => 27
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[32] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Foundation\Http\Middleware\ValidatePostSize
[type] => ->
)
[33] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php
[line] => 63
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[34] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode
[type] => ->
)
[35] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\fruitcake\laravel-cors\src\HandleCors.php
[line] => 37
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[36] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Fruitcake\Cors\HandleCors
[type] => ->
)
[37] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\fideloper\proxy\src\TrustProxies.php
[line] => 57
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[38] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 167
[function] => handle
[class] => Fideloper\Proxy\TrustProxies
[type] => ->
)
[39] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php
[line] => 103
[function] => Illuminate\Pipeline\{closure}
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[40] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php
[line] => 140
[function] => then
[class] => Illuminate\Pipeline\Pipeline
[type] => ->
)
[41] => Array
(
[file] => C:\phpstudy\WWW\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php
[line] => 109
[function] => sendRequestThroughRouter
[class] => Illuminate\Foundation\Http\Kernel
[type] => ->
)
[42] => Array
(
[file] => C:\phpstudy\WWW\laravel\public\index.php
[line] => 55
[function] => handle
[class] => Illuminate\Foundation\Http\Kernel
[type] => ->
)
[43] => Array
(
[file] => C:\phpstudy\WWW\laravel\server.php
[line] => 21
[args] => Array
(
[0] => C:\phpstudy\WWW\laravel\public\index.php
)
[function] => require_once
)
)
8204

被折叠的 条评论
为什么被折叠?



