* **bug是任何語言都無法避免的問題,對于比較有經驗的php程序員來講,通常使用 echo,var_dump 可以解決大部分bug,但是當代碼環境較為復雜的情況下這么做效率就非常低下了(比如學習一個框架的源碼),斷點調試就非常好的解決了這個問題。在你習慣使用斷點之后,你會發現之前debug的方式是多么的浪費時間和精力。**
* **本文將筆者使用php斷點調試的方法和技巧做了深度的總結和歸納,對于php新手來說有相當參考價值。**
>[danger]
> **這里假設大家已經參照 “調試環境的搭建” 章節搭建好了環境,如果沒有,請先搭建調試環境。**
**環境搭建好以后,用phpstrom打開項目**
**如下圖,在index.php里第4行位置設置斷點,確保按鈕1的狀態如圖,即為打開狀態**
**瀏覽器訪問項目,會得到此圖一樣的效果**

**先介紹幾常用個按鈕的作用(圖中標注標號的)**
1. 按鈕1是斷點模式的開關,打開以后斷點才會起作用
2. 按鈕2是中斷請求,即請求停留在一個斷點的時候,點擊會中斷整個http請求
3. 按鈕3是當前棧執行一步,不進入函數內執行。即代碼向下執行一步,如果下一步是調用函數,它不會進入函數里顯示執行過程,而是直接把函數執行的結果返回來
4. 按鈕4是區別按鈕3,當前棧執行一步,同時進入函數內執行。即代碼向下執行一步,如果下一步是調用函數,它會進入函數里顯示執行過程,方便查看函數里的執行過程
5. 按鈕5和按鈕4幾乎一樣,反正目前我沒看出區別,用起來感覺一樣
6. 按鈕6是在函數里執行的時候,跳過此函數或者方法的剩余部分,反回到上一層的調用棧
7. 按鈕7是動態斷點,即鼠標光標定位在哪一行,點擊此按鈕的時候回自動在那一行斷點
8. 按鈕8是執行到下一個斷點位置停留下來
9. 按鈕9同按鈕2一樣
10. 按鈕10是查看當前項目一個設置了哪些斷點
11. 按鈕11是當前請求所有斷點忽略,通常配合按鈕8一起使用,即直接執行完所有代碼
**右下的大框框里顯示的是當前堆棧的變量,可以方便的查看各個變量的值,這就是比起 echo 最方便的地方**
**這樣通過追蹤堆棧,查看代碼執行過程,我們可以方便的找到變量的變化過程,找到bug的源頭**
**如圖**

## **其他參考**
如何愉快的在PhpStorm中進行Xdebug斷點調試:https://blog.csdn.net/RobotYang123/article/details/80370030
如何愉快的在PhpStorm中進行Xdebug斷點調試:https://segmentfault.com/a/1190000014942730
PHP xdebug 模塊下載:https://xdebug.org/download.php
PHP xdebug 模塊檢測和下載:https://xdebug.org/wizard.php
Xdebug helper 瀏覽器插件:https://www.crx4chrome.com/crx/1716/
PhpStorm 本地斷點調試:https://blog.csdn.net/qq_21386275/article/details/78109498
- 序言
- 圖片預覽
- 詮釋高效開發
- 提問的智慧
- GIT命令參考
- 安裝composer
- 斷點調試技巧
- 調試環境的搭建
- 調試工具的使用及技巧
- 前置基礎-TP底層講解
- 理解編程的抽象
- 耦合與解耦
- 自動加載
- 反射類
- 控制反轉(IOC)和依賴注入(DI)
- iThink 自定義依賴注入的實現
- 常用設計模式
- SPL標準庫
- 行為-鉤子-插件
- AOP-面向切面
- RBAC和Auth類的本質
- 安裝iThink
- 環境要求
- 代碼下載與環境配置
- 執行安裝
- 體驗測試模塊
- apache配置
- nginx配置
- 系統架構詳解
- 目錄詳解
- 執行流程圖
- 數據字典
- RBAC 權限管理架構
- 系統分層詳解
- 控制器層(controller)
- 邏輯層(logic)
- 視圖層(view)
- 模型層(model)
- 服務層(service)
- 應用包架構詳解
- 目錄結構
- 開發規范
- 數據庫規范
- 編碼規范
- 功能設計原則與規范
- 后臺功能詳解
- 基礎功能
- RBAC + Auth 權限機制
- 應用化功能機制
- 代碼生成器(重要)
- 應用骨架代碼生成
- 數據表 CURD 代碼生成
- 頁面構造器(重要)
- 通用元素構造器
- 表格元素構造器
- 搜索表單元素構造器
- 表單元素構造
- 閉包事物構造器
- 應用的開發
- 函數參考