xdebug + remote debugging + one of the supported clients
這邊我的clients選sublime的XDebug Client 插件
Windows 7 上裝的 XAMPP 要怎麼開啟XDebug?
其實在你的D:\xampp資料夾下有文檔activate-use-xdebug.pdf,
或直接開啟
http://localhost/dashboard/docs/activate-use-xdebug.html
文檔中有要你安裝 WinCacheGrind 去調試,裝了後不會用+介面太醜。放棄
打開D:/xampp/php/php.ini ,加入以下配置
[XDebug]
zend_extension = "D:\xampp\php\ext\php_xdebug.dll" => 使用xampp的xdebug時要這樣寫,配置 extension=php_xdebug.dll 無效
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "D:\xampp\tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.remote_log="D:\xampp\xdebug_log"
重啟Apache
打開phpinfo()後會看到
表示PHP的XDebug配置成功
安裝sublime XDebug Client
直接Package Control 搜尋XDebug Client 安裝
配置Sublime
要調試某一個項目,首先得把這個項目在sublime下保存成一個project (一直都有這習慣)
sublime->project->save project as ...
接下來配置專案
sublime->project->edit poject
設定檔類似以下內容:
{
"folders":
[
{
"path": "."
}
],
"settings": {
"xdebug": {
"url": "http://test.localhost/",
}
}
}
其中url是專案所在url,記得在hosts裡頭將這個url指向127.0.0.1,還有在apache的virtualhost裡將其指向專案根目錄
這樣就OK了,準備開啟調試吧
開啟調試
開啟調試方式也比較簡單,在想要加中斷點的地方右鍵
xdebug->Add/Remove breakpoint
這樣專案在運行到本行的時候就會停止下來
然後開始調試,在功能表列選擇
tools->xdebug->start debugging(launch browser)
sublime會自動打開瀏覽器,進入配置時寫的網站連結,進行調試
可能問題
無法跟蹤中斷點
這可能是xdebug埠被佔用,按Ctrl+`或者功能表列View->show Console查看錯誤資訊,有可能是xdebug埠已經被佔用的緣故。
我遇到的狀況是
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Bear\\AppData\\Roaming\\Sublime Text 3\\Packages\\Xdebug Client\\Xdebug.sublime-settings'
error: CodeFormatter
原來 C:\Users\Bear\AppData\Roaming\Sublime Text 3\Packages\Xdebug Client 沒這個目錄,手動新建目錄後, Preferences => Package settings => Xdebug => Setting - Default 儲存才能看到Xdebug.sublime-settings 被存到正確的位置。Xdebug.sublime-settings我用預設值,沒特別配置
Ethan 的XDebug
http://blog.xuite.net/ahdaa/blog1/42909643-%5BPHP%5DXdebug
Ethan配置的XDebug有像這篇一樣,在畫面上顯示堆疊,不過我覺得Sublime XDebug Client更好用,就不研究這篇了
在command line ( CLI )上調試XDebug + Sublime
https://github.com/martomo/SublimeTextXdebug/issues/3
Xdebug.sublime-settings 和 *.sublime-project 不用動
打開xampp的console,輸入
Windows
set XDEBUG_CONFIG="idekey=sublime.xdebug"
php myscript.php
UNIX
export XDEBUG_CONFIG="idekey=sublime.xdebug"
php myscript.php
下面這行沒設斷點,但也會跑進去,連跑兩次,第二次XDebug會crash掉
$this->oDB = &A::singleton( 'db', $aDBO );
把&拿掉,改成
$this->oDB = A::singleton( 'db', $aDBO );
正常
注意:不能打開cygwin,因為cygwin的php沒有配置XDebug,可用php -m 檢查
注意: ubuntu的cli和fpm的php.ini是分開的,要在CLI除錯記得cli的php.ini也要加入xdebug的配置
Debug時觀察變數
所有的變數都在Xdebug Context 面板中
如何像chrome開發者工具的console一樣,觀察現在的變數?
右鍵 => XDebug => Set Watch Expression 或 Edit Watch Expression
然後在 XDebug Watch 面板中看結果
Debug時運算變數
如何像chrome開發者工具的console一樣,在斷點時運算變數(更改變數的值)?
(進入斷點)ctrl+shift+p => 執行 XDebug: Session - Evaluate => 輸入框輸入PHP代碼。ex. $test= "123"; => ctrl + shift + F5 ( XDebug: Breakpoint - Run )
這樣子就會將$test的值改為"123"後往下跑
防止在Notice、Strict standards、Deprecated時被中斷(break)
Xdebug.sublime-settings ( Setting - Default ) break_on_exception 註解掉 "Notice"、"Strict standards"、"Deprecated"
使用start debugging(launch browser) 後網頁轉不出來
這是目前比較無解的一個情況,在使用CLI debug或要切專案debug時,常常發生start debugging(launch browser) 打開瀏覽器後,網頁疑似被斷點轉不出來,但sublime卻沒進斷點,無法繼續往下跑的現象
Sublime console ( Ctrl+` ) 報錯:
File "xdebug.helper.helper in C:\Users\User\AppData\Roaming\Sublime Text 3\Installed Packages\Xdebug Client.sublime-package", line 45, in base64_encode
UnicodeEncodeError: 'ascii' codec can't encode characters in position 381-384: ordinal not in range(128)
改用sublime text 2的Xdebug Client
這個老外也有同樣的問題
https://github.com/martomo/SublimeTextXdebug/issues/98
參考資料:
http://stackoverflow.com/questions/3717136/php-debugging-with-breakpoints-case-studies-examples PHP Debugging with Breakpoints - case studies, examples..?
http://yansu.org/2014/03/20/php-debug-with-xdebug.html 用Xdebug和Sublime调试PHP代码(主要)
https://github.com/martomo/SublimeTextXdebug SublimeTextXdebug