xdebug配合IDE調試層經是老楊解決特殊bug的大法寶,像flash上傳這種,用xdebug調試最好不過了。他適合于不確定bug在哪的情況,可以從過程中觀察數據的變化。
## Xdebug的安裝
首先去官網下載:
<http://xdebug.org/download.php>

windows的下載對應php版本的dll,linux的要自己編譯。
### windows上php 擴展dll的選擇
用戶常常會發現每個 DLL 都有好幾個版本:
- 不同的版本號(至少前兩個數字要一致)
- 不同的線程安全性設定
- 不同的處理器體系(x86,x64,...)
- 不同的排錯設定
- 其它
請記住用戶的擴展設定應該與所使用的 PHP 可執行文件的設定都保持一致。在phpinfo中我們可以輕松的看出php的版本和ts是否線程安全
### linux的php so的編譯
phpize 命令是用來準備 PHP 擴展庫的編譯環境的。下面例子中,擴展庫的源程序位于 extname 目錄中:
~~~
$ cd extname
$ phpize
$ ./configure
$ make
# make install
~~~
成功的安裝將創建 extname.so 并放置于 PHP 的擴展庫目錄中。需要調整 php.ini,加入 extension=extname.so 這一行之后才能使用此擴展庫。
如果系統中沒有 phpize 命令并且使用了預編譯的包(例如 RPM),那要安裝 PHP 包相應的開發版本,此版本通常包含了 phpize 命令以及相應的用于編譯 PHP 及其擴展庫的頭文件。
使用 `phpize --help` 命令可以顯示此命令用法。
### xdebug的配置
一般只要在php.ini
加上以下配置就行了:
~~~
[xdebug]
xdebug.remote_enable = on
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
~~~
保存完畢,重啟別忘了重啟apache
然后 phpinfo頁面里看有沒有出現像下圖的xdebug:

## Netbeans的設置
##### 先打開一個本地項目:

##### 配置調試時的地址:

**freelog.cn**是我配的vhost,當然你們也可以用**localhost**,不過不建議直接使用**localhost**。
##### 設置斷點
打開項目,找到 `Home/Controller/IndexController.class.php`,隨便設置兩個斷點

設置斷點方法是在要設置斷點的行前面,代碼折疊gutter 里 “單擊” 鼠標左鍵。取消是再單擊一次已有斷點。
然后開始“調試該項目”:

這時候,netbeans 會 打開默認瀏覽器,我的是chrome。

這時候,netbeans 默認是設置在代碼第一行停止,
netbeans 界面出現我這樣的圖,就表示xdebug 連接成功:

這是我們可以點“步過”

一行行繼續 往下調試,直到第一個斷點游標行變綠:

這時候下面已經可以看到調用堆棧了。
切斷到變量頁:

這時候我們已經可以看到 `$page`了,還有$Superglobals(超全局變量),以及`$this`。$page 變量的類型是Integer 整形,值為1。 `$this` 我們展開它,可以看見有view和config2個屬性。

我們繼續步過,進入到lists方法里:

又可以看到下面的變量值。
當我們所有斷點都執行過后,點綠色的“繼續”按鈕:

走完調試index 控制器的index方法。這時候瀏覽器里的頁面就正常了:

調試就結束了。當然如果你一開始沒設定對斷點,有可能沒走到你想要的地方。
你可以隨時添加,只要不結束調試,刷新一下那個 帶netbean session參數的頁面,只要能繼續訪問你想要的控制器,比方ajax 上傳文件,再次操作。還會進調試的斷點。
所以一般我都是多設幾個斷點,幾次調試后無關行數的斷點再關閉。這樣省點事。
當我們覺得不必要調試了。我們就可以點紅色“終止”按鈕:

瀏覽器出現:

就表示調試結束了。
- 序
- 前言
- 內容簡介
- 目錄
- 基礎知識
- 起步
- 控制器
- 模型
- 模板
- 命名空間
- 進階知識
- 路由
- 配置
- 緩存
- 權限
- 擴展
- 國際化
- 安全
- 單元測試
- 拿來主義
- 調試方法
- 調試的步驟
- 調試工具
- 顯示trace信息
- 開啟調試和關閉調試的區別
- netbeans+xdebug
- Socketlog
- PHP常見錯誤
- 小黃鴨調試法,每個程序員都要知道的
- 應用場景
- 第三方登錄
- 圖片處理
- 博客
- SAE
- REST實踐
- Cli
- ajax分頁
- barcode條形碼
- excel
- 發郵件
- 漢字轉全拼和首字母,支持帶聲調
- 中文分詞
- 瀏覽器useragent解析
- freelog項目實戰
- 需求分析
- 數據庫設計
- 編碼實踐
- 前端實現
- rest接口
- 文章發布
- 文件上傳
- 視頻播放
- 音樂播放
- 圖片幻燈片展示
- 注冊和登錄
- 個人資料更新
- 第三方登錄的使用
- 后臺
- 微信的開發
- 首頁及個人主頁
- 列表
- 歸檔
- 搜索
- 分頁
- 總結經驗
- 自我提升
- 進行小項目的鍛煉
- 對現有輪子的重構和移植
- 寫技術博客
- 制作視頻教程
- 學習PHP的知識和新特性
- 和同行直接溝通、交流
- 學好英語,走向國際
- 如何參與
- 瀏覽官網和極思維還有看云
- 回答ThinkPHP新手的問題
- 嘗試發現ThinkPHP的bug,告訴官方人員或者push request
- 開發能提高效率的ThinkPHP工具
- 嘗試翻譯官方文檔
- 幫新手入門
- 創造基于ThinkPHP的產品,進行連帶推廣
- 展望未來
- OneThink
- ThinkPHP4
- 附錄