超好用的 phpstorm debug工具,yasd

邢闖洋發表於2022-01-16

前言

平常在開發中,總會有一些需要 debug 的時候,手動打斷點 var_dumpdie 等方式總是耗時耗力還不優雅,這時候可能會有人選擇安裝 xdebug 擴充套件,在 phpstorm 中配置 xdebug 來除錯。

但當你需要用到 swoole 框架時,並需要除錯 swoole 框架中程式碼時,xdebug 是不能用在 swoole 上的,是和 swoole 有衝突的。

然後我發現了一款比較好用的,可以相容 fpm 框架,和 swoole 框架的 debug 除錯工具,yasd.

安裝

1. Mac上安裝 boots 庫

brew install boost

2. 從 Github 上下載 yasd 原始碼

git clone https://github.com/swoole/yasd.git

3. 編譯安裝 yasd

cd yasd
phpize --clean && \
phpize && \
./configure && \
make clean && \
make && \
make install

4. 修改 php.ini

zend_extension="yasd.so"

;命令列除錯
;yasd.debug_mode=cmd
;遠端除錯
yasd.debug_mode=remote
;本地開發地址
yasd.remote_host=127.0.0.1
;本地開發監聽埠
yasd.remote_port=9000

檢視擴充套件資訊

➜  yasd php --ri yasd

yasd

Yasd => enabled
Author => codinghuang <codinghuang@qq.com>
Version => 0.3.9-alpha
Built => Jan 15 2022 14:09:47

Directive => Local Value => Master Value
yasd.breakpoints_file => no value => no value
yasd.debug_mode => remote => remote
yasd.remote_host => 127.0.0.1 => 127.0.0.1
yasd.remote_port => 9000 => 9000
yasd.depth => 1 => 1
yasd.log_level => -1 => -1
yasd.max_executed_opline_num => 0 => 0
yasd.init_file => no value => no value
yasd.open_extended_info => 0 => 0
xdebug.coverage_enable => 1 => 1
xdebug.profiler_enable => 1 => 1
xdebug.remote_autostart => 1 => 1
xdebug.remote_connect_back => 0 => 0
xdebug.remote_mode => req => req
xdebug.idekey => hantaohuang => hantaohuang

5. 除錯指令碼

使用 yasd 除錯指令碼,必須要新增 -ephp 引數,例如這樣

# 除錯普通php指令碼
php -e test.php
# 除錯 laravel 的 command
php -e artisan test
# 除錯 hyperf 框架
php -e bin/hyperf start

配置 phpstorm

1. 配置 phpstorm 監聽 9000 埠

超好用的 phpstorm debug工具,yasd

2. 點選 phpstorm 右上角的電話圖示啟動監聽

超好用的 phpstorm debug工具,yasd

3. 測試 debug 除錯

在 Laravel 中隨便寫一個 test command

php -e artisan test

超好用的 phpstorm debug工具,yasd
到這裡就已經成功了

除錯 Hyperf 框架

上面說了在 fpm 中除錯,接下來說一下在 Hyperf 框架中如何除錯

需要注意的幾點

  1. 在 Hyperf 中使用需要將 config.php 中的 scan_cacheable 引數設定為 true,該引數為是否掃描代理類,若設定為 true,則每次啟動都會直接掃描快取代理類,而不是重新掃描在生成代理類。
    設定為 true 後需要注意,每次修改程式碼需要手動生成代理類,composer dump-autoload -o,然後在啟動。
    或者直接在代理類中修改程式碼,當 debug 結束後,再將代理類中的程式碼複製到真實類中。
    代理類生成路徑在 runtime/container/proxy
  2. 在 Hyperf 框架中如果使用到了 Swoole Server,需要將 worker_num 設定為 1 否則斷點可能不會生效。該引數在 server.php 中。

剩下的除錯就和上面講的沒什麼區別了。

參考文章:

官方文件
yasd Github
yasd除錯swoole框架程式碼
在IDE中使用yasd偵錯程式-影片教程
Mac M1 swoole yasd安裝除錯過程及問題記錄

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章