Xdebugのインストールと使用


序文

ソフトウェア デバッグは一般に、ソフトウェアの欠陥を再現し、問題の根本原因を特定して見つけ出し、最終的に問題を解決するプロセスを指します。编写的程序不可能一直不出错,所以调试很重要デバッグには通常、次の 2 つの異なる定義があります。

  • 定義 1:
软件调试是为了发现并排除软件程序中 的错误,可以通过某种方法控制被调试程序的执行过 程,以便随时查看和修改被调试程序执行状态的方法。 在该定义中,软件测试属于软件调试的一部分,与 牛津词典中的调试定义类似。 在牛津词典中调试定义 为:“识别和排除计算机硬件或软件中错误的过程。”
  • 定義 2:
调试是执行一次成功的测试之后所要进 行的工作。 所谓成功的测试,是指它可以证明程序没 有实现预期的功能。 调试包含两个步骤,从执行了一个成功测试用例,发现问题后开始;第一步,确定程序 中可疑错误的准确性质和位置;第二步,修改错误。 在该定义中软件测试从调试工作中分离出来。

1.Xdebugの設定方法

XDebug をダウンロード ダウンロード アドレス: http://www.xdebug.org/ マシンにインストールされている php と一致するバージョンをダウンロードする必要があります。具体的なダウンロード方法は次のとおりです。phpinfo Web ページのソース コードを http://www.xdebug.org/find-binary.php にコピーし、指示に従ってインストールします。

  1. Xdebugのダウンロード、PHPに対応したXdebugバージョンをダウンロード
    ここに画像の説明を挿入
  2. ダウンロードしたファイルを指定したディレクトリに置きます
    ここに画像の説明を挿入
  3. php.ini 構成ファイルを変更します (php.ini ファイルの最後に次のコードを追加します)。
[XDebug] 
xdebug.default_enable=1
; 如下三条选项是远程调试配置
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.mode=debug
xdebug.remote_handler=dbgp
xdebug.remote_host="www.loophole.com"  
xdebug.remote_port=9003
xdebug.extended_info=1
xdebug.remote_autostart=1
zend_extension="D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext\php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll"
xdebug.idekey="PHPSTORM"

上記のように 2 つの位置が変更されています。xdebug.remote_host="www.loophole.com" www.loophole.comドメイン名情報であり、次のように任意のドメイン名を指定できます。

ここに画像の説明を挿入

zend_extension="D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext\php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll", D:\phpstudy_pro\Extensions\php\php7.3.9nts\ext\php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dllXdebug ファイルが配置される場所です

他の Xdebug 構成は次のとおりです。

[Xdebug]
;指定Xdebug扩展文件的绝对路径
zend_extension="d:/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;启用性能检测分析
xdebug.profiler_enable=on
;启用代码自动跟踪
xdebug.auto_trace=on
;允许收集传递给函数的参数变量
xdebug.collect_params=on
;允许收集函数调用的返回值
xdebug.collect_return=on
;指定堆栈跟踪文件的存放目录
xdebug.trace_output_dir="D:/debug"
;指定性能分析文件的存放目录
xdebug.profiler_output_dir="D:/debug"
xdebug.profiler_output_name = cachegrind.out.%t.%p
备注:在上述配置内容中,zend_extension用于指定Xdebug扩展模块的文件路径(由于Xdebug是基于Zend引擎的扩展,因此必须使用zend_extension配置指令,而不是extension。zend_extension指令的配置路径必须是绝对路径)。之后的6个配置语句是Xdebug的配置参数。
此时,我们重启服务器,通过访问含有phpinfo()函数的PHP文件,即可看到Xdebug模块的相关信息。


3、配置参数选项附录
在上面的Xdebug配置中,我们只配置了6个常用的配置选项。当然,Xdebug还支持更多的配置参数,详情见下表。
配置参数选项

  参数值类型与默认值 参数选项描述
xdebug.auto_trace boolean类型,默认值=0 是否在脚本运行之前自动调用相关追踪函数。
xdebug.cli_color integer类型,默认值=0 该参数自2.2版本开始引入。如果值=1,当处于CLI模式或连接虚拟控制台时,Xdebug将高亮显示var_dumps()和堆栈输出,;在Windows中,这需要安装ANSICON工具。如果值=2,不管是否处于CLI模式或连接虚拟控制台,Xdebug都会高亮显示var_dumps()或堆栈输出;这种情况下,你可能会看到转义后的代码。
xdebug.collect_assignments boolean类型,默认值=0 该参数自2.1版本开始引入。用于控制是否为函数跟踪添加变量赋值功能。
xdebug.collect_includes boolean类型,默认值=1 控制是否在跟踪文件中写入include()、include_once()、require()、require_once()等函数中用到的文件名。
xdebug.collect_params integer类型,默认值=0
控制在调用函数时,是否收集传递给函数的参数信息。如果参数值过大,这可能会占用大量的内存;不过,在Xdebug 2中不会出现该问题,因为Xdebug 2将相关数据写入磁盘中,而不是占用内存。

如果值=0,则不显示任何信息。
如果值=1,只显示类型和大小信息,例如:string(6)、array(8)。
如果值=2,将显示类型和大小,以及全部信息的工具提示。
如果值=3,将显示变量的全部内容。
如果值=4,将显示变量的全部内容和变量名。

xdebug.collect_return boolean类型,默认值=0 控制是否在追踪文件中写入函数调用的返回值。
xdebug.collect_vars boolean类型,默认值=0 控制是否收集指定作用域中的变量信息。由于需要反向工程PHP的操作码数组,因此Xdebug的分析速度可能比较慢。
xdebug.coverage_enable boolean类型,默认值=1 该参数自2.2版本开始引入。控制是否允许通过设置内部结构来启用代码覆盖率功能。
xdebug.default_enable boolean类型,默认值=1 当发生异常或错误时,是否默认显示堆栈信息。
xdebug.dump.* string类型,默认值=Empty 这里的*可以是COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION中的任意一个。用于指定发生错误时是否显示超全局变量数组中的索引变量信息。比如,你想要显示请求的IP地址和请求方式,可以设置为
xdebug.dump.SERVER=REMOTE_ADD,REQUEST_METHOD
多个索引变量用英文逗号隔开,如果要输出其中的所有变量,可以直接用*,例如:
xdebug.dump.GET=*
xdebug.dump_globals boolean类型,默认值=1 控制是否显示通过xdebug.dump.*定义的所有超全局变量的信息。
xdebug.dump_once boolean类型,默认值=1 如果出现多个错误,控制超全局变量信息是在所有错误中显示,还是只在第一个错误中显示。
xdebug.dump_undefined boolean类型,默认值=1 控制是否显示超全局变量中未定义的值。
xdebug.extended_info integer类型,默认值=1 是否强制进入PHP解析器的"extended_info"模式,这将允许Xdebug以远程调试器对文件或行添加断点。开启此模式将拖慢脚本的允许速度,该参数只能在php.ini中设置。
xdebug.file_link_format string类型,默认值=, 自2.2版本开始引入。用于指定堆栈信息中用到的文件名称的链接样式,这允许IDE通过设置链接协议,直接点击堆栈信息中的文件名称,即可快速打开指定的文件。例如:ZendStudio://%f@%l(%f表示文件路径,%f表示行号)。
xdebug.force_display_errors integer类型,默认值=0 自2.3版本开始引入。是否强制显示错误信息。
xdebug.force_error_reporting integer类型,默认值=0 自2.3版本开始引入。是否强制显示所有错误级别的信息。
xdebug.halt_level integer类型,默认值=0 自2.3版本开始引入。指定出现那些错误级别的错误时,中止程序运行。例如:xdebug.halt_level=E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE(也仅支持上述4种错误级别)。
xdebug.idekey string类型,默认值=*complex* 指定传递给DBGp调试器处理程序的IDE Key。
xdebug.manual_url string类型,默认值=http://www.php.net 仅2.2.1以下版本可用,用于指定从函数堆栈和错误信息链接到的帮助手册的基本URL。
xdebug.max_nesting_level integer类型,默认值=100 指定递归的嵌套层级数。
xdebug.overload_var_dump boolean类型,默认值=1 自2.2版本开始引入,当php.ini中的html_error设为1时,Xdebug是否默认使用自身的改进版本来重载var_dump()。
xdebug.profiler_append integer类型,默认值=0 当多个请求映射到相同文件时,指定是覆盖之前的调试信息文件还是追加内容到该文件中。
xdebug.profiler_enable integer类型,默认值=0 指定是否启用Xdebug的性能分析,并创建性能信息文件。
xdebug.profiler_output_dir string类型,默认值=/tmp 指定性能分析信息文件的输出目录
xdebug.profiler_output_name string类型,默认值=cachegrind.out.%p 指定性能分析信息文件的名称
xdebug.remote_enable boolean类型,默认值=0 是否开启远程调试
xdebug.remote_handler string类型,默认值=dbgp 指定远程调试的处理协议
xdebug.remote_host string类型,默认值=localhost 指定远程调试的主机名
xdebug.remote_log string类型,默认值= 指定远程调试的日志文件名
xdebug.remote_mode string类型,默认值=req 可以设为req或jit,req表示脚本一开始运行就连接远程客户端,jit表示脚本出错时才连接远程客户端。
xdebug.remote_port integer类型,默认值=9000 指定远程调试的端口号
xdebug.trace_options integer类型,默认值=0 指定对于之后的请求,追踪文件是追加内容还是覆盖之前内容。
xdebug.trace_output_dir string类型,默认值=/tmp 指定追踪文件的存放目录
xdebug.trace_output_name string类型,默认值=trace.%c 指定追踪文件的名称

2、PHPstrom 構成

  1. まず設定オプションを開きます
    ここに画像の説明を挿入
  2. サーバーを追加

ここに画像の説明を挿入
3. DBGP プロキシ設定
ここに画像の説明を挿入
4. 構成の編集
ここに画像の説明を挿入
ここに画像の説明を挿入

3、Xdebugの使用

1. パネル機能説明

ここに画像の説明を挿入

2. デバッグ機能の詳細説明

ここに画像の説明を挿入

それぞれの機能は以下の通りです。

  1. 実行ポイントを表示: 他の行または他のページを見ている場合、このボタンをクリックすると、現在のコードが実行される場所にジャンプします。
  2. ステップバイステップ: コードを 1 行ずつオフラインで実行します如果这一行里面有调用其他的方法的话,不会进入该方法里面,只会将该方法对应的值取到ループがある場合は複数回実行されます。
  3. ステップイン: 如果当前行执行了call其他方法,可以进入该方法的内部、コアメソッドを実行しないカスタムメソッドを入力するために使用されるメソッドのグループ、和步过有细微的区别,注意区分
  4. 強制ステップイン: 現在の行が他のメソッドの呼び出しを実行する場合、メソッドの内部に入ることができます查看底层源码的时候可以用这个进入
  5. ステップアウト: 入力されたメソッドからメソッドを終了します退出到方法的调用出。この時点でメソッドが実行され、代入が完了し、実行が次の行に進みます。
  6. 現在のマウスクリック位置まで実行します。将鼠标点击到你需要的查看的哪一行,然后使用这个功能,代码就会运行到那一行ブレークポイントを設定する必要はありません。
  7. 計算式
  8. プログラムの実行を継続します。2 行目と 5 行目に 2 つのブレークポイントがあるとします当前运行至2行,按一下,则运行到下一个断点(即5行。)
  9. プログラムを一時停止する: プログラムの実行中にプログラムを強制的に停止します。
  10. 停止: 2 回押してプログラムを閉じます。プログラムの開始時にポートが占有されていることがあります。これは、デバッガが完全に閉じられていないためです。
  11. ブレークポイントの表示: 次のように、すべてのブレークポイント情報を表示します。
    ここに画像の説明を挿入
  12. ブレークポイントを有効にします。将所有的断点变为灰色并使它们失效,按继续执行程序可以直接运行完调试程序,再次点击这个按钮可以是所有无效的断点变为有效

4、Xdebug 原則

  1. まず第一に PhpStorm中已经集成了一个遵循 BGDp 的 Xdebug 插件デバッグ時はこのプラグインを起動してください。该插件会启动一个 9000 的端口监听远程服务器发过来的 debug 信息(ポートをリッスンしてデバッグかどうかを確認します)
  2. デバッグ時、ブラウザは XDEBUG_SESSION_START パラメータを含むリクエストを Httpd サーバーに送信し、サーバーはリクエストを受信した後の処理のためにバックエンド PHP (xdebug モジュールが有効になっている) にリクエストを送信します。
  3. Php が受信したリクエストには XDEBUG_SESSION_START パラメータが含まれており、この時点で、Xdebug はソース IP クライアントのポート 9000 (デフォルトではポート 9000) にデバッグ リクエストを送信し、クライアントのポート 9000 がリクエストに応答して、デバッグが行われます。始まります。
  4. Php は Xdebug の準備ができていることを認識しているため、コードを 1 行ずつ実行し始めますが、各行は Xdebug によってフィルタリングされます。Xdebug がコードの各行をフィルタリングすると、コードの実行が一時停止され、コードがクライアントのポート 9000 このコード行の実行ステータス。クライアントの決定を待っています (コードであるか、次のブレークポイントであるか)。
  5. これに対応して、クライアント (IDE) は、Xdebug によって送信された実行ステータス (いくつかの変数の値を含む) を受信した後、開発者に情報を表示できます。また、次に何が起こるかを Xdebug に送信します。

おすすめ

転載: blog.csdn.net/qq_53568983/article/details/128652184