當xdebug激活時,PHP一旦要顯示通知、警告或錯誤時,xdebug 顯示堆棧跟蹤信息。這個堆棧信息能跟據你的須要來配置顯示。php
Xdebug顯示的堆棧跟蹤都是以保守數量狀態顯示信息。由於大量的信息處理和呈現會拖慢腳本執行。經過不一樣的設置對於顯示更多詳盡的信息提供了可能。html
堆棧跟蹤的變量數組
Xdebug通常會在堆棧跟蹤時顯示變量信息。在收集和顯示狀況下變量信息都會攜帶大量資源。儘管如此,不少狀況下這些變量信息的顯示是頗有幫助的,這是爲何會有xdebug.clollect_params設置的緣由。如下腳本,會在設置不一樣值狀況下輸出不一樣的信息:安全
<?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工具 |
||||
#ui |
Timethis |
Memoryurl |
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()函數。