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()函 ...
随机推荐
- Android开发学习之路-该怎么学Android(Service和Activity通信为例)
在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通 ...
- EF优缺点的理解
原先用的是三层架构中ADO.NET做底层开发,纯手工sql语句拼装.后来遇到一个MVC+EF项目,体会到了EF的强大性. 它是微软封装好一种ADO.NET数据实体模型,将数据库结构以ORM模式映射到应 ...
- LINQ系列:LINQ to SQL Select查询
1. 查询全部字段 using (NorthwindContext context = new NorthwindContext()) { var expr = context.Products; f ...
- 【转】Linux C动态内存泄漏追踪方法
原文:http://www.cnblogs.com/san-fu-su/p/5737984.html C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借 ...
- Vagrant使用
常用命令 命令 说明 vagrant up 运行vm vagrant status 查看当前虚拟机运行状态 vagrant suspend 暂停虚拟机 vagrant ssh ssh方式登录虚拟机 v ...
- windows server 注意windows的temp目录
windows解压缩包.安装软件时,会生成一些临时文件存放在temp目录中,windows不会自动删除这些文件. 临时文件目录可以在环境变量中查看和配置 在工作机or个人PC机中中这个目录一般不会有什 ...
- 构建自己的PHP框架--构建缓存组件(2)
上一篇博客中使用文件实现了缓存组件,这一篇我们就使用Redis来实现一下,剩下的如何使用memcache.mysql等去实现缓存我就不一一去做了. 首先我们需要安装一下 redis 和 phpredi ...
- php教程|php基础知识
第1章 初识PHP 当前网络技术发展日新月异,各种基于服务端创建动态网站的脚本语言更是层出不穷.其中PHP以其简单.易用.可移植性强等特点,在众多的动态网站语言技术中独树一帜.那么到底什么是PHP, ...
- Android百度地图 关于visibility="gone"的奇葩问题
最近在项目中遇到一个奇葩问题,花了很长时间,在这里记录下. 问题描述:我的主界面是ViewPager+Fragment,并且设置缓存了我的4个ViewPager页面.左侧是一个侧滑菜单,点击相应按钮打 ...
- ZOJ Problem Set - 1292 Integer Inquiry
题目本身属于简单题,但是注意在输出的时候,题目很变态的对格式做了很多要求: 1.输入的N与下面的block有一个空行 2.每次输出与下一个输入的block有一个空行 3.但是特别注意,当是最后一个输出 ...