Xdebug文檔(三)堆疊追蹤,xdebug文檔堆疊追蹤
當xdebug啟用時,PHP一旦要顯示通知、警告或錯誤時,xdebug 顯示堆疊追蹤資訊。這個堆棧資訊能跟據你的需要來配置顯示。
Xdebug顯示的堆疊追蹤都是以保守數量狀態顯示資訊。因為大量的資訊處理和呈現會拖慢指令碼執行。通過不同的設定對於顯示更多詳盡的資訊提供了可能。
堆疊追蹤的變數
Xdebug一般會在堆疊追蹤時顯示變數資訊。在收集和顯示情況下變數資訊都會攜帶大量資源。儘管如此,很多情況下這些變數資訊的顯示是很有協助的,這是為什麼會有xdebug.clollect_params設定的原因。以下指令碼,會在設定不同值情況下輸出不同的資訊:
The script
phpfunction 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:
phpfunction 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:
phpxdebug_start_function_monitor( [ 'strrev', 'array_push' ] );?>
你也可以添加類方法或靜態方法到數組中進行監視。例如,為了捕獲靜態調用DramModel::canSee 和 動態調用 Whisky->drink,你可以開始以下監視:
Example:
phpxdebug_start_function_monitor( [ 'DramModel::canSee', 'Whisky->drink'] );?>
被定義的函數要區分大小寫,若動態調用到靜態方法將不會被捕獲。
void xdebug_stop_function_monitor()
停止函數監視
始於版本2.4
該函數停止對函數監視。需要擷取被監視函數列表,可以使用xdebug_get_monitored_functions()函數。
http://www.bkjia.com/PHPjc/1133572.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1133572.htmlTechArticleXdebug文檔(三)堆疊追蹤,xdebug文檔堆疊追蹤 當xdebug啟用時,PHP一旦要顯示通知、警告或錯誤時,xdebug 顯示堆疊追蹤資訊。這個堆棧資訊...