Xdebug文档(三)堆栈跟踪
当xdebug激活时,PHP一旦要显示通知、警告或错误时,xdebug 显示堆栈跟踪信息。这个堆栈信息能跟据你的需要来配置显示。
Xdebug显示的堆栈跟踪都是以保守数量状态显示信息。因为大量的信息处理和呈现会拖慢脚本执行。通过不同的设置对于显示更多详尽的信息提供了可能。
堆栈跟踪的变量
Xdebug一般会在堆栈跟踪时显示变量信息。在收集和显示情况下变量信息都会携带大量资源。尽管如此,很多情况下这些变量信息的显示是很有帮助的,这是为什么会有xdebug.clollect_params设置的原因。以下脚本,会在设置不同值情况下输出不同的信息:
The script
<?php
function foo( $a ) {
for ($i = 1; $i < $a['foo']; $i++) {
if ($i == 500000) xdebug_break();
}
} set_time_limit(1);
$c = new stdClass;
$c->bar = 100;
$a = array(
42 => false, 'foo' => 912124,
$c, new stdClass, fopen( '/etc/passwd', 'r' )
);
foo( $a );
?>
默认值:
|
( ! ) Fatal error: Maximum execution time of 1 second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 34 |
||||
|
Call Stack |
||||
|
# |
Time |
Memory |
Function |
Location |
|
1 |
0.0001 |
58564 |
{main}( ) |
../stack.php:0 |
|
2 |
0.0004 |
62764 |
foo( ) |
../stack.php:47 |
1值:
ini_set('xdebug.collect_params', '1');
|
( ! ) Fatal error: Maximum execution time of 1 second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31 |
||||
|
Call Stack |
||||
|
# |
Time |
Memory |
Function |
Location |
|
1 |
0.0001 |
58132 |
{main}( ) |
../stack.php:0 |
|
2 |
0.0004 |
62380 |
foo( array(5) ) |
../stack.php:47 |
2值:
ini_set('xdebug.collect_params', '2');
|
( ! ) Fatal error: Maximum execution time of 1 second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31 |
||||
|
Call Stack |
||||
|
# |
Time |
Memory |
Function |
Location |
|
1 |
0.0001 |
58564 |
{main}( ) |
../stack.php:0 |
|
2 |
0.0004 |
62812 |
foo( array(5) ) |
../stack.php:47 |
3值:
ini_set('xdebug.collect_params', '3');
|
( ! ) Fatal error: Maximum execution time of 1 second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31 |
||||
|
Call Stack |
||||
|
# |
Time |
Memory |
Function |
Location |
|
1 |
0.0001 |
58564 |
{main}( ) |
../stack.php:0 |
|
2 |
0.0004 |
62812 |
foo( array (42 => FALSE, 'foo' => 912124, 43 => class stdClass { public $bar = 100 }, 44 => class stdClass { }, 45 => resource(2) of type (stream)) ) |
../stack.php:47 |
4值:
ini_set('xdebug.collect_params', '4');
|
( ! ) Fatal error: Maximum execution time of 1 second exceeded in /home/httpd/html/test/xdebug/docs/stack.php on line 31 |
||||
|
Call Stack |
||||
|
# |
Time |
Memory |
Function |
Location |
|
1 |
0.0001 |
58132 |
{main}( ) |
../stack.php:0 |
|
2 |
0.0004 |
62380 |
foo( $a = array (42 => FALSE, 'foo' => 912124, 43 => class stdClass { public $bar = 100 }, 44 => class stdClass { }, 45 => resource(2) of type (stream)) ) |
../stack.php:47 |
相关设置:
xdebug.cli_color
类型: integer, 默认值: 0, 始于 2.2版以上
设置为1时,xdebug会在CLI模式下且在tty终端输出时,会以有色显示var_dump跟踪输出的文字。window下, ANSICON工具需要安装。
设置为2时,则不管是否连接到tty终端或ANSICON是否被安装,xdebug会一直用颜色显示var_dump和调试跟踪信息。这种情形下,你可能在结束处看到转义码。
xdebug.collect_includes
类型: boolean, 默认值: 1
默认情况下xdebug将使用include(), include_once(), require() 或 require_once()方法引用的文件名写入到跟踪文件里。
xdebug.collect_params
类型: integer, 默认值: 0
默认为0时,该设置控制xdebug不管是函数追踪还是堆栈跟踪都会收集调用函数的参数。
默认0值是考虑到大规模脚本会占用大量内存,所以不会为了大脚本来运行它。你可以安全地打开此设置,但你会预料到会一些脚本上的问题像大量函数调用兼庞大的数据结构作为参数传递。Xdebug2不会有增加内存使用的问题,因为它不会存储到内存,而是只存入磁盘中。这只需要你有足够的磁盘使用量即可。
该设置有4种设置值。每种都会呈现不同的信息。以下表格展示各种设置值信息:
|
Value |
Argument Information Shown |
|
0 |
无. |
|
1 |
展示变量元素的值类型和值。 |
|
2 |
展示变量元素的值类型和值,并附带滑鼠提示显示完整信息。(CLI模式下不存在滑鼠提示) |
|
3 |
完整变量内容(内容受限于以下设置: xdebug.var_display_max_children,xdebug.var_display_max_data and xdebug.var_display_max_depth.) |
|
4 |
完整变量内容和名称。 |
|
5 |
PHP 序列化变量内容,不含名称。(2.3版本新特性) |
xdebug.collect_vars
类型: boolean, 默认值: 0
该设置会让xdebug在一定范围内去收集变量信息。而这种分析工作相当慢因为xdebug会逆向解析PHP代码。该设置不会记录不同变量的值。如果你要利用xdebug_get_declared_vars()函数,那么就需要开启该设置了。
xdebug.dump.*
类型: string, 默认值: Empty
* 号可以用 COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION任意一个来代替. 这七个设置值控制在错误发生时的超全局变量的数据。
在php.ini中每个设置值都由逗号分隔形成变量列表,或者*号代表全部。要确定你在设置里没有空格。
为了在错误发生时收到REMOTE_ADDR 和 REQUEST_METHOD 信息和所有GET参数,可以设置:
xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD
xdebug.dump.GET = *
xdebug.dump_globals
类型: boolean, 默认: 1
控制超全局变量值是否显示,无论在xdebug.dump.*设置了什么。
xdebug.dump_once
类型: boolean, 默认值: 1
控制是否在所有错误情况下显示超全局变量值(设为0值)或只在第一次出现(设为1值)。
xdebug.dump_undefined
类型: boolean, 默认值: 0
如果需要显示超全局变量中未定义值则该项设为1,否则保留0默认项。
xdebug.manual_url
类型: string, 默认值: http://www.php.net, 始于 Xdebug 2.2.1以下版本
指定函数追踪和错误信息的链接说明来源。建议设定使用最近的镜像链接。
xdebug.show_exception_trace
类型: integer, 默认值: 0
当设置为1时,Xdebug会在异常出现时甚至是该异常被捕捉也会显示其堆栈跟踪信息。
xdebug.show_local_vars
类型: integer, 默认值: 0
当设置为非0值时,Xdebug在错误情况下产生的堆栈跟踪会显示所有变量信息在最顶端范围。这有可能会产生大量信息,所以默认情况下关闭。
xdebug.show_mem_delta
Type: integer, Default value: 0
当该设置不为0时,xdebug的人类可读性追踪记录文件会显示函数调用时内存使用量。如果xdebug配值为产生机器可读性追踪文件,那么它们经常显示这些信息。、
xdebug.var_display_max_children
类型: integer, 默认值: 128
在使用 xdebug_var_dump(),xdebug.show_local_vars 或 追踪函数时,该设置控制数组元素和对象属性的数量显示。
若不受限制,可以设为-1值。
该设置不受Remot_Debuggin远程调试的任何影响。
xdebug.var_display_max_data
类型: integer, 默认值: 512
在使用 xdebug_var_dump(),xdebug.show_local_vars 或 追踪函数时,该设置控制字符串长度显示最大值。
若不受限制,可以设为-1值。
该设置不受Remot_Debugging远程调试的任何影响。
xdebug.var_display_max_depth
类型: integer, 默认值: 3
在使用 xdebug_var_dump(),xdebug.show_local_vars 或 追踪函数时,该设置控制数组元素和对象属性的显示层级。
最大值为1023,你可以设为-1表示其最大值。
该设置不受Remot_Debugging远程调试的任何影响。
相关函数:
array xdebug_get_declared_vars()
返回一个数组,数组元素都是当前范围内已定义的变量名。要使函数生效则xdebug.collect_vars必须开启。
Example:
<?php
class strings {
static function fix_strings($a, $b) {
foreach ($b as $item) {
}
var_dump(xdebug_get_declared_vars());
}
}
strings::fix_strings(array(1,2,3), array(4,5,6));
?>
/**
Returns:
array
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'item' (length=4) */
PHP5.1之前版本,变量名“a”不会在返回的数组中,因为在xdebug_get_declared_vars()函数执行时,该变量没被使用。
array xdebug_get_function_stack()
返回一数组,内含在函数这个点显示出来的类似于堆栈跟踪的信息。
Example:
<?php
class strings {
function fix_string($a)
{
var_dump(xdebug_get_function_stack());
} function fix_strings($b) {
foreach ($b as $item) {
$this->fix_string($item);
}
}
} $s = new strings();
$ret = $s->fix_strings(array('Derick'));
?>
/**
Returns: array 0 => array 'function' => string '{main}' (length=6) 'file' => string '/var/www/xdebug_get_function_stack.php' (length=63) 'line' => int 0 'params' => array empty 1 => array 'function' => string 'fix_strings' (length=11) 'class' => string 'strings' (length=7) 'file' => string '/var/www/xdebug_get_function_stack.php' (length=63) 'line' => int 18 'params' => array 'b' => string 'array (0 => 'Derick')' (length=21) 2 => array 'function' => string 'fix_string' (length=10) 'class' => string 'strings' (length=7) 'file' => string '/var/www/xdebug_get_function_stack.php' (length=63) 'line' => int 12 'params' => array 'a' => string ''Derick'' (length=8) */
integer xdebug_get_stack_depth()
返回堆栈深度层级。脚本主体为0级而各种引用或调用函数则添加一个堆栈深度层级。
none xdebug_print_function_stack( [ string message [, int options ] ] )
用类似在错误情况下显示当前函数追踪信息。
"message" 参数允许你可以自定义显示信息。 (始于Xdebug 2.1版本).
Example:
<?php
function foo( $far, $out )
{
xdebug_print_function_stack( 'Your own message' );
}
foo( 42, 3141592654 );
?>
Returns:
|
( ! ) Xdebug: Your own message in /home/httpd/html/test/xdebug/print_function_stack.php on line 5 |
||||
|
Call Stack |
||||
|
# |
Time |
Memory |
Function |
Location |
|
1 |
0.0006 |
653896 |
{main}( ) |
../print_function_stack.php:0 |
|
2 |
0.0007 |
654616 |
foo( 42, 3141592654 ) |
../print_function_stack.php:7 |
|
3 |
0.0007 |
654736 |
xdebug_print_function_stack ( 'Your own message' ) |
../print_function_stack.php:5 |
掩码参数"options" 允许你配置一些额外的参数选项。支持的选项有:
XDEBUG_STACK_NO_DESC
如果设置此项,则显示的追踪信息不包含头部。这对于你想从自定义的错误处理器中显示自己的错误追踪信息就很有用。除此之外,你可以在需要显示的位置调用xdebug_print_function_statck()函数。(始于xdebug2.3)
void xdebug_start_function_monitor( array $list_of_functions_to_monitor )
开始函数监控。
始于版本2.4
该函数在将一系列的函数名作为参数传递时就开始监视这些函数。函数监视器会找出这些你提供的函数所在的代码。这样可以用于追踪那些旧函数或废弃的函数。
Example:
<?php
xdebug_start_function_monitor( [ 'strrev', 'array_push' ] );
?>
你也可以添加类方法或静态方法到数组中进行监视。例如,为了捕获静态调用DramModel::canSee 和 动态调用 Whisky->drink,你可以开始以下监视:
Example:
<?php
xdebug_start_function_monitor( [ 'DramModel::canSee', 'Whisky->drink'] );
?>
被定义的函数要区分大小写,若动态调用到静态方法将不会被捕获。
void xdebug_stop_function_monitor()
停止函数监视
始于版本2.4
该函数停止对函数监视。需要获取被监视函数列表,可以使用xdebug_get_monitored_functions()函数。
Xdebug文档(三)堆栈跟踪的更多相关文章
- Xdebug文档(四)函数跟踪
Xdebug能让你把所有函数调用,包括参数和返回值以不同的格式记录到文件中. 这些号称“函数跟踪”功能能帮助你面对一个新应用程序,亦或者在程序运行时你想弄清楚它在做什么.函数跟踪功能可以选择性地显示函 ...
- Xdebug文档(七) 远程调试
Xdebug提示调试客户端接口与PHP运行相联系.该章节解释如何设置PHP与xdebug,并推荐一些客户端. 介绍 Xdebug的远程调试器允许你检查数据结构,交互式地穿过和调试你的代码.该协议已经开 ...
- C# 写入XML文档三种方法详细介绍
三个类将同样的xml内容写入文档,介绍了如何使用XmlDocument类对XML进行操作,以及如何使用LINQ to XML对XML进行操作. 它们分别使用了XmlDocument类和XDocum ...
- 翻译qmake文档(三) Creating Project Files
翻译qmake文档 目录 原英文文档:http://qt-project.org/doc/qt-5/qmake-project-files.html 创建项目文件 项目文件包含qmake构建你 ...
- libevent学习文档(三)working with event
Events have similar lifecycles. Once you call a Libevent function to set up an event and associate i ...
- 【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级
SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWU ...
- Xdebug文档(六) 分析PHP脚本
分析PHP脚本Xdebug内置分析器能让你找到脚本中的瓶颈并用额外的工具诸如KcacheGrind或WinCacheGrind工具可视化. 介绍 Xdebug分析器是分析PHP代码和判断瓶颈或确定代码 ...
- Xdebug文档(二)变量显示特性
Xdebug能替代PHP的var_dump()函数来显示变量值.xdebug的版本包含对不同数据类型作数组元素/对象属性.最大深度和字符串长度以不同颜色标识.这里也有一些功能能很好地处理变量显示. 相 ...
- Xdebug文档(一)基本特性
基本属性(参数) xdebug.default_enable 类型: boolean,默认值: 1 这是xdebug的基本设置,默认在调试跟踪时显示错误信息.可以使用xdebug_disable()函 ...
随机推荐
- 支持向量机(SVM)复习总结
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略 ...
- 解决 PLSQL Developer无法连接数据库
问题:PLSQL Developer无法连接数据库 原因:PLSQL Developer不支持x64的Oracle客户端 解决方案:1.下载instantclient-basic-nt-12.1.0. ...
- jquery插件的两种形式
这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...
- Laravel 5.3 请求处理管道详解
对于一个Web应用来说,在一个请求真正处理前,我们可能会对请求做各种各样的判断,然后才允许后续处理. 我们通常的做法: Script 01.php Script 02.php 优点:直观,容易理解 缺 ...
- UML基础系列:类图
类图描述系统中类的静态结构,它不仅定义系统中的类,描述类之间的联系,如关联.依赖.聚合等,还包括类的内部结构(类的属性和操作).类图描述的是静态关系,在系统的整个生命周期中都是有效的.对象图是类图的实 ...
- Android之控件使用
Android系统为我们提供了大量的控件,例如:开关控件.单选按钮.多选按钮.单选菜单等等,那么这些控件如何使用呢?本篇我将带领大家一道学习一下如何使用这些控件.所谓无图无真相,先让大家看一下效果图: ...
- document.getElementById()与 $()区别
document.getElementById()返回的是DOM对象,而$()返回的是jQuery对象 什么是jQuery对象? ---就是通过jQuery包装DOM对象后产生的对象.jQuery对象 ...
- 【彩票】彩票预测算法(一):离散型马尔可夫链模型C#实现
前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. 已经3个月没写博客了,因为业余时间一直在研究彩票,发现还是有很多乐趣,偶尔买买,娱 ...
- 【开源】OSharp框架解说系列(1):总体设计及系列导航
系列文章导航 [开源]OSharp框架解说系列(1):总体设计 [开源]OSharp框架解说系列(2.1):EasyUI的后台界面搭建及极致重构 [开源]OSharp框架解说系列(2.2):EasyU ...
- Oracle RAC客户端tnsnames.ora相关配置及测试
1.Oracle RAC服务端/etc/hosts部分内容如下 2.查看服务端的local_listener和remote_listener参数 3.客户端tnsnames.ora配置参考 3.1 1 ...