程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Xdebug文檔(四)函數跟蹤,xdebug文檔函數跟蹤

Xdebug文檔(四)函數跟蹤,xdebug文檔函數跟蹤

編輯:關於PHP編程

Xdebug文檔(四)函數跟蹤,xdebug文檔函數跟蹤


Xdebug能讓你把所有函數調用,包括參數和返回值以不同的格式記錄到文件中。

這些號稱“函數跟蹤”功能能幫助你面對一個新應用程序,亦或者在程序運行時你想弄清楚它在做什麼。函數跟蹤功能可以選擇性地顯示函數或方法傳遞的變量值,也可以是返回值。跟蹤這兩個元素默認情況下不開啟的。

輸出格式

共有三種輸出格式。一種是人類可讀性跟蹤信息,另一個是更適合計算機程序解析的,最後一種使用HTML格式化跟蹤信息的。你可以使用xdebug_trace_format設置切換這兩種不周的格式。還有一些設置是控制哪些信息寫入跟蹤文件的。例如設置包含變量的(xdebug.collect_params)和包含返回值的(xdebug.collect_return)。以下例子展示人類可讀性的函數跟蹤信息的不同設置效果:

The Script

<?php
$str = "Xdebug";
function ret_ord( $c )
{
    return ord( $c );
}

foreach ( str_split( $str ) as $char )
{
    echo $char, ": ", ret_ord( $char ), "\n";
}
?>


 

The Results

以下由xdebug.collect_params設置不同值時的結果。當不在web環境下,2值不包含鼠標提示。

默認值:

TRACE START [2007-05-06 14:37:06]

    0.0003     114112   -> {main}() ../trace.php:0

    0.0004     114272     -> str_split() ../trace.php:8

    0.0153     117424     -> ret_ord() ../trace.php:10

    0.0165     117584       -> ord() ../trace.php:5

    0.0166     117584     -> ret_ord() ../trace.php:10

    0.0167     117584       -> ord() ../trace.php:5

    0.0168     117584     -> ret_ord() ../trace.php:10

    0.0168     117584       -> ord() ../trace.php:5

    0.0170     117584     -> ret_ord() ../trace.php:10

    0.0170     117584       -> ord() ../trace.php:5

    0.0172     117584     -> ret_ord() ../trace.php:10

    0.0172     117584       -> ord() ../trace.php:5

    0.0173     117584     -> ret_ord() ../trace.php:10

    0.0174     117584       -> ord() ../trace.php:5

    0.0177      41152

TRACE END   [2007-05-06 14:37:07]

 

Collect_params=1:

TRACE START [2007-05-06 14:37:11]
    0.0003     114112   -> {main}() ../trace.php:0
    0.0004     114272     -> str_split(string(6)) ../trace.php:8
    0.0007     117424     -> ret_ord(string(1)) ../trace.php:10
    0.0007     117584       -> ord(string(1)) ../trace.php:5
    0.0009     117584     -> ret_ord(string(1)) ../trace.php:10
    0.0009     117584       -> ord(string(1)) ../trace.php:5
    0.0010     117584     -> ret_ord(string(1)) ../trace.php:10
    0.0011     117584       -> ord(string(1)) ../trace.php:5
    0.0012     117584     -> ret_ord(string(1)) ../trace.php:10
    0.0013     117584       -> ord(string(1)) ../trace.php:5
    0.0014     117584     -> ret_ord(string(1)) ../trace.php:10
    0.0014     117584       -> ord(string(1)) ../trace.php:5
    0.0016     117584     -> ret_ord(string(1)) ../trace.php:10
    0.0016     117584       -> ord(string(1)) ../trace.php:5
    0.0019      41152
TRACE END   [2007-05-06 14:37:11]

Collect_params=3:

TRACE START [2007-05-06 14:37:13]
    0.0003     114112   -> {main}() ../trace.php:0
    0.0004     114272     -> str_split('Xdebug') ../trace.php:8
    0.0007     117424     -> ret_ord('X') ../trace.php:10
    0.0007     117584       -> ord('X') ../trace.php:5
    0.0009     117584     -> ret_ord('d') ../trace.php:10
    0.0009     117584       -> ord('d') ../trace.php:5
    0.0010     117584     -> ret_ord('e') ../trace.php:10
    0.0011     117584       -> ord('e') ../trace.php:5
    0.0012     117584     -> ret_ord('b') ../trace.php:10
    0.0013     117584       -> ord('b') ../trace.php:5
    0.0014     117584     -> ret_ord('u') ../trace.php:10
    0.0014     117584       -> ord('u') ../trace.php:5
    0.0016     117584     -> ret_ord('g') ../trace.php:10
    0.0016     117584       -> ord('g') ../trace.php:5
    0.0019      41152
TRACE END   [2007-05-06 14:37:13]

Collect_params=4:

TRACE START [2007-05-06 14:37:16]
    0.0003     114112   -> {main}() ../trace.php:0
    0.0004     114272     -> str_split('Xdebug') ../trace.php:8
    0.0007     117424     -> ret_ord($c = 'X') ../trace.php:10
    0.0007     117584       -> ord('X') ../trace.php:5
    0.0009     117584     -> ret_ord($c = 'd') ../trace.php:10
    0.0009     117584       -> ord('d') ../trace.php:5
    0.0010     117584     -> ret_ord($c = 'e') ../trace.php:10
    0.0011     117584       -> ord('e') ../trace.php:5
    0.0012     117584     -> ret_ord($c = 'b') ../trace.php:10
    0.0013     117584       -> ord('b') ../trace.php:5
    0.0014     117584     -> ret_ord($c = 'u') ../trace.php:10
    0.0014     117584       -> ord('u') ../trace.php:5
    0.0016     117584     -> ret_ord($c = 'g') ../trace.php:10
    0.0016     117584       -> ord('g') ../trace.php:5
    0.0019      41152
TRACE END   [2007-05-06 14:37:16]

除了xdebug.collet_params設置還有另一些設置影響跟蹤文件的輸出效果。“show_mem_delta=1”可以顯示內存使用量在兩個不同列中。

TRACE START [2007-05-06 14:37:26]
    0.0003     114112  +114112   -> {main}() ../trace.php:0
    0.0004     114272     +160     -> str_split('Xdebug') ../trace.php:8
    0.0007     117424    +3152     -> ret_ord($c = 'X') ../trace.php:10
    0.0007     117584     +160       -> ord('X') ../trace.php:5
    0.0009     117584       +0     -> ret_ord($c = 'd') ../trace.php:10
    0.0009     117584       +0       -> ord('d') ../trace.php:5
    0.0011     117584       +0     -> ret_ord($c = 'e') ../trace.php:10
    0.0011     117584       +0       -> ord('e') ../trace.php:5
    0.0013     117584       +0     -> ret_ord($c = 'b') ../trace.php:10
    0.0013     117584       +0       -> ord('b') ../trace.php:5
    0.0014     117584       +0     -> ret_ord($c = 'u') ../trace.php:10
    0.0015     117584       +0       -> ord('u') ../trace.php:5
    0.0016     117584       +0     -> ret_ord($c = 'g') ../trace.php:10
    0.0017     117584       +0       -> ord('g') ../trace.php:5
    0.0019      41152
TRACE END   [2007-05-06 14:37:26]

“collect_return=1”顯示被調用函數的返回值:

TRACE START [2007-05-06 14:37:35]
    0.0003     114112   -> {main}() ../trace.php:0
    0.0004     114272     -> str_split('Xdebug') ../trace.php:8
                          >=> array (0 => 'X', 1 => 'd', 2 => 'e', 3 => 'b', 4 => 'u', 5 => 'g')
    0.0007     117424     -> ret_ord($c = 'X') ../trace.php:10
    0.0007     117584       -> ord('X') ../trace.php:5
                            >=> 88
                          >=> 88
    0.0009     117584     -> ret_ord($c = 'd') ../trace.php:10
    0.0009     117584       -> ord('d') ../trace.php:5
                            >=> 100
                          >=> 100
    0.0011     117584     -> ret_ord($c = 'e') ../trace.php:10
    0.0011     117584       -> ord('e') ../trace.php:5
                            >=> 101
                          >=> 101
    0.0013     117584     -> ret_ord($c = 'b') ../trace.php:10
    0.0013     117584       -> ord('b') ../trace.php:5
                            >=> 98
                          >=> 98
    0.0015     117584     -> ret_ord($c = 'u') ../trace.php:10
    0.0016     117584       -> ord('u') ../trace.php:5
                            >=> 117
                          >=> 117
    0.0017     117584     -> ret_ord($c = 'g') ../trace.php:10
    0.0018     117584       -> ord('g') ../trace.php:5
                            >=> 103
                          >=> 103
                        >=> 1
    0.0021      41152
TRACE END   [2007-05-06 14:37:35]

 

“collect_assignments=1”顯示變量賦予,詳見xdebug.collect_assignments設置。

“xdebug.trace_format”設置改變輸出格式讓解析更容易但反而讓人更難理解。這對於用第三方工具解析跟蹤文件最有用處。

Version: 2.0.0RC4-dev
TRACE START [2007-05-06 18:29:01]
1       0       0       0.010870       114112  {main}  1       ../trace.php   0
2       1       0       0.032009       114272  str_split      0       ../trace.php   8
2       1       1       0.032073       116632
2       2       0       0.033505       117424  ret_ord 1       ../trace.php   10
3       3       0       0.033531       117584  ord     0       ../trace.php   5
3       3       1       0.033551       117584
2       2       1       0.033567       117584
2       4       0       0.033718       117584  ret_ord 1       ../trace.php   10
3       5       0       0.033740       117584  ord     0       ../trace.php   5
3       5       1       0.033758       117584
2       4       1       0.033770       117584
2       6       0       0.033914       117584  ret_ord 1       ../trace.php   10
3       7       0       0.033936       117584  ord     0       ../trace.php   5
3       7       1       0.033953       117584
2       6       1       0.033965       117584
2       8       0       0.034108       117584  ret_ord 1       ../trace.php   10
3       9       0       0.034130       117584  ord     0       ../trace.php   5
3       9       1       0.034147       117584
2       8       1       0.034160       117584
2       10      0       0.034302       117584  ret_ord 1       ../trace.php   10
3       11      0       0.034325       117584  ord     0       ../trace.php   5
3       11      1       0.034342       117584
2       10      1       0.034354       117584
2       12      0       0.034497       117584  ret_ord 1       ../trace.php   10
3       13      0       0.034519       117584  ord     0       ../trace.php   5
3       13      1       0.034536       117584
2       12      1       0.034549       117584
1       0       1       0.034636       117584
TRACE END   [2007-05-06 18:29:01]

 

VIM 語法文件

Xdebug 攜帶一個VIM語法文件能對跟蹤文件的語法提亮,該語法文件名:xt.vim。 為了使VIM識別新格式,你需這麼做:

augroup filetypedetect
au BufNewFile,BufRead *.xt  setf xt
augroup END

做完這些後,打開的跟蹤文件就會類似這樣:

TRACE START [2007-05-15 20:06:02]
    0.0003     115208   -> {main}() ../trace.php:0
    0.0004     115368     -> str_split() ../trace.php:8
    0.0006     118520     -> ret_ord() ../trace.php:10
    0.0007     118680       -> ord() ../trace.php:5
    0.0008     118680     -> ret_ord() ../trace.php:10
    0.0009     118680       -> ord() ../trace.php:5
    0.0010     118680     -> ret_ord() ../trace.php:10
    0.0010     118680       -> ord() ../trace.php:5
    0.0012     118680     -> ret_ord() ../trace.php:10
    0.0012     118680       -> ord() ../trace.php:5
    0.0014     118680     -> ret_ord() ../trace.php:10
    0.0014     118680       -> ord() ../trace.php:5
    0.0016     118680     -> ret_ord() ../trace.php:10
    0.0016     118680       -> ord() ../trace.php:5
    0.0019      54880
TRACE END   [2007-05-15 20:06:02]

相關設置:

xdebug.auto_trace

類型: boolean, 默認值: 0

打開此設置時,腳本在運行前函數調用追蹤將開啟。這將可能追蹤auto_prepend_file設置的代碼文件。

xdebug.collect_assignments

類型: boolean, 默認值: 0, 始於 Xdebug > 2.1

用於控制xdebug是否添加變量賦予到函數追蹤當中。

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_return

類型: boolean, 默認值: 0

控制是否將函數調用的返回值寫入到跟蹤文件裡。

要達到計算機化跟蹤文件(xdebug.trace_format=1) 必須要用到Xdebug 2.3 以上版本。

 

xdebug.show_mem_delta

類型: integer, 默認值: 0

當此設置不為0值,可人為讀取的跟蹤文件將各函數調用占用內存量的不同。如果xdebug設置為產生計算機可讀的跟蹤文件,則他們會一直顯示這樣的信息。

 

xdebug.trace_enable_trigger

類型: boolean, 默認值: 0, 始於 Xdebug > 2.2

設置為1時,你能使用XDEBUG_TRACE GET/POST 參數或設置一名為XDEBUG_TRACE的cookie值觸發跟蹤文件的產生。跟蹤數據文件將寫入到預定義文件夾內。為了防止xdebug在每次請求時產生跟蹤文件,你需要將xdebug.auto_trace設為0。訪問觸發器自身可通過設置 xdebug.trace_enable_trigger_value。

 

xdebug.trace_enable_trigger_value

類型: string, 默認值: "", 始於 Xdebug > 2.3

該設置用於限制誰能利用XDEBUG_TRACE功能描述到xdebug.trace_enable_trigger。當變更了默認空值後,cookie,GET或POST值需要為跟蹤文件的產生匹配設置內的共享隱藏設置。

 

xdebug.trace_format

類型: integer, 默認值: 0

跟蹤文件的格式。

描述

0

顯示人類可讀性排版式文件:時間點,內存量,內存增量(如果xdebug.show_mem_delta 開啟), 層級, 函數名, 函數參數 (如果 xdebug.collect_params 開啟),文件名和行號。

1

用兩種不同記錄編寫記算機可讀格式文件。其記錄不同在於一個插入堆棧邊框,一個移除堆棧邊框。以下表格列出記錄中每個欄位區別。

2

使用HTML寫成跟蹤文件。

計算機化格式的欄位:

Record type

1

2

3

4

5

6

7

8

9

10

11

12 - ...

Entry

level

function #

always '0'

time index

memory usage

function name

user-defined (1)   or internal function (0)

name of   the include/require file

filename

line number

no. of parameters

parameters   (as many as specified in field 11) - tab separated

Exit

level

function #

always '1'

time index

memory usage

empty

Return

level

function #

always 'R'

empty

return value

empty

 

xdebug.trace_options

類型: integer, 默認值: 0

設為1時跟蹤文件會後續添加內容,而不是在後續請求中直接覆蓋。

 

xdebug.trace_output_dir

類型: string, 默認值: /tmp

跟蹤文件寫入路徑,確保用戶在運行PHP時有對該目錄的寫入權限。

 

xdebug.trace_output_name

類型: string, 默認值: trace.%c

該設置決定了跟蹤信息寫入的文件名。該設置使用了格式化標識符,類似於sprintf() 和 strftime()。 以幾種格式標識符可以用於格式化文件名。後綴名 '.xt' 會自動地添加到文件名後。

格式化標識符列表:

標識符

意義

格式范例

文件范例

%c

當前工作路徑的crc32效驗值

trace.%c

trace.1258863198.xt

%p

進程標識符

trace.%p

trace.5174.xt

%r

隨機數

trace.%r

trace.072db0.xt

%s

腳本名 2

cachegrind.out.%s

cachegrind.out._home_httpd_html_test_xdebug_test_php

%t

時間截 (秒)

trace.%t

trace.1179434742.xt

%u

時間截 (微秒)

trace.%u

trace.1179434749_642382.xt

%H

$_SERVER['HTTP_HOST']

trace.%H

trace.kossu.xt

%R

$_SERVER['REQUEST_URI']

trace.%R

trace._test_xdebug_test_php_var=1_var2=2.xt

%U

$_SERVER['UNIQUE_ID'] 3

trace.%U

trace.TRX4n38AAAEAAB9gBFkAAAAB.xt

%S

session_id   (來源$_COOKIE,如果有設置)

trace.%S

trace.c70c1ec2375af58f74b390bbdd2a679d.xt

%%

literal %

trace.%%

trace.%%.xt

2 對於跟蹤文件名這是不可用的。

3 版本2.2新特性。該特性由Apache mod_unique_id module 設置。

 

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遠程調試的任何影響。

 

相關函數:

string xdebug_get_tracefile_name()

返回當前跟蹤輸出的腳本文件名。當xdebug.auto_trace打開時這個函數就能使用了。

 

void xdebug_start_trace( string trace_file [, integer options] )

啟動一新的函數跟蹤

位於某個點開始函數跟蹤並入到參數trace_file指定的文件中。如果沒有指定文件名,則跟蹤文件存入 xdebug.trace_output_dir設定指定目錄中。一旦在第一參數中指定了文件名,則該名稱相對於當前工作目錄。不過當前工作目錄可能與你期望的不一樣,所以在指定文件名時最好指定絕對目錄。PHP函數 getcwd() 能指出當前工作目錄。

跟蹤文件名一般是"{trace_file}.xt"。如果 xdebug.auto_trace 開啟,那麼文件名"{filename}.xt"的"{filename}"部分由設置 xdebug.trace_output_name 決定。參數options是比特值,有三種選項:

XDEBUG_TRACE_APPEND (1)

使跟蹤文件以追加模式打開而不是覆蓋模式。

XDEBUG_TRACE_COMPUTERIZED (2)

創建一個跟蹤文件而其格式由"xdebug.trace_format"描述。

XDEBUG_TRACE_HTML (4)

以html表格創建跟蹤文件。

XDEBUG_TRACE_NAKED_FILENAME (8)

一般來說,Xdebug會添加".xt"到你指定的第一個參數的文件名結尾。使用XDEBUG_TRACE_NAKED_FILENAME選項, ".xt" 則不會再添加 (Xdebug 2.3新特性).

不像Xdebug 1,Xdebug 2不會在函數調用時占用內存。,但它會寫入磁盤而緩解內存使用的壓力。 xdebug.collect_includes, xdebug.collect_params 和xdebug.collect_return 等設置會影響跟蹤文件記錄什麼樣的信息,而xdebug.trace_format 則影響文件信息的格式。

 

void xdebug_stop_trace()

停止跟蹤函數調用並關閉跟蹤文件。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved