日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

跨平台PHP调试器设计及使用方法——立项

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跨平台PHP调试器设计及使用方法——立项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 作為一個閑不住且希望一直能挑戰自己的人,我總是在琢磨能做點什么。自從今年初開始接觸PHP,我也總想能在這個領域內產生點貢獻。那能做點什么呢?我經常看到很多phper說自己設計了一個什么框架,或者說自己搭建了一個什么系統。雖然這些對自己來說算是一種歷練,但是這些對更多的人來說可能并沒太多幫助。而我希望我能做的是可以幫助到更多人的東西。于是就有了標題中這個項目的立項。(轉載請指明出于breaksoftware的csdn博客)

? ? ? ? 這個項目的相關想法我醞釀了一兩個月。利用零零散散的時間我不停的調研相關技術可能性,思考產品的形態和功能。于是在今年七月份,我給組內發了一份《PHP調試器設計心路歷程和初步想法》的郵件。現在翻看了一下這封郵件,寫的還算正式。我就將該郵件的內容作為該博文的主要內容給貼出來,最后我會對該封郵件進行補充:

Hi all:????????

? ? ? ? 由于我們組需要產出一些公共使用的組件,所以上次會上我提出一個制作PHP調試器的想法。????????

? ? ? ? 這個想法的初衷是為了解決PHP調試的一些痛點。我觀察并詢問了一些長期從事PHP開發的同學,發現他(她)們幾乎都是使用var_dump/print之類的打印方法去進行調試。這個方法雖然很管用,但是其也有很多弊端:

  • 需要改動源碼進行調試。要在需要觀察的數據的地方加上打印函數,否則無法觀察數據。
  • 增加代碼出錯的概率。調試結束后還需要找到之前添加的打印函數,并刪除它們,如果忘記刪除可能會導致輸出錯誤。
  • 降低效率。由于調試前需要修改文件,調試結束后還需要還原文件。這個過程消耗的時間會大大降低我們調試的效率。
  • 不可更改性。我們可能對需要打印的數據做了錯誤的判斷,導致打印數據的位置不正確,從而導致本次增加的調試信息不可以輔助我們調試。而這種不可更改性,需要我們重新修改文件以進行新的調試。

? ? ? ? 基于以上的問題,我最初的想法是想設計出一種PHP擴展,它將所有過程中的變量(全局變量,成員變量,臨時變量等)都保存起來。這是一種輕量級的設計,可以讓我們在執行一次PHP文件后,記錄所有變量,然后回溯各個變量的值。但是這個方案我覺得存在以下問題:

  • 大數據量。比如我們在PHP中需要讀出一個文件,這個文件的內容可能只是簡單使用一下,而我們的設計將要永久記錄下它。
  • 循環中處理數據的問題。如果循環中不停讀取文件和寫文件,那么我們要要記錄大量中間數據。
  • 遞歸處理數據問題。問題同上。
  • 浪費磁盤空間,影響效率。因為存在可能需要將大量數據存儲中磁盤中的操作,所以這個效率將影響整個調試過程。
  • 不具有通用性。我們要輸出的是一個希望大家都能使用起來的產品,這種輕量級的產品存在之前列出的很多的缺點,所以不可能成為一個通用性的產品。

? ? ? ? 于是上周五我將這個方案給否了,又進行一次方案的調研和設計。好在天無絕人之路,我找到一個我們可以做、且很有前景的一個方案:Xdebug+DebugWebServer。

? ? ? ? Xdeug是PHP的一個調試擴展,我看了一下它的源碼,寫的挺好,是一個值得信任的插件。它提供了基本的調試功能,而這些調試功能也正好能解決我們之前的痛點。而且:

  • 大牛作品,質量可信耐。且還在維護中。
  • 有群眾基礎。有大量的用戶使用這個擴展進行調試。
  • 多版本支持。有標準PHP版本,還有hhvm版本,目前PHP標準版已經可以支持PHP7了。
  • 開放的協議。它使用了一套開放的調試通信協議,方便用戶使用其調試功能。
? ? ? ? 但是目前已經有很多關于Xdebug調試的方案,比如netbeans+xdebug、notepad++ + xdebug、vim+xdebug。好在大家都沒有將事情給做絕了,還給我留下一條路——就是DebugWebServer+Xdebug。我們先來分析下這個方案和其他方案的不同:
  • Vim+xdebug。應該是一個最容易讓人接受的方案。但是Vim是Linux系統上的軟件,如果在Windows系統上部署的PHP引擎并在Windows上進行PHP開發,將無法使用這套方案。所以這個方案存在局限性。
  • Netbeans+xdebug。諸如Netbeans這類IDE,很多開發者并不喜歡用,他們電腦也會存在這些IDE。所以這類IDE+xdebug的方案也存在局限性。
  • Notepad++ + xdebug。不同的開發者喜歡不同的開發編輯工具,有很多人喜歡Notepad++,也有很多人喜歡Sublime。這些無法做到統一,所以編輯器+xdebug的方法也存在局限性。
? ? ? ? 而DebugWebServer則不存在以上問題,因為
  • 作為網絡服務存在,可以運行在Windows或者Linux系統上。
  • 只需要在PHP所在的環境上部署一次,可以在不同環境下使用,降低學習成本。
? ? ? ? 最后講下DebugWebServer的設計:
  • Python去實現相關功能。因為我們調試的是PHP,所以不想產生雞生蛋蛋生雞這類的問題,所以我沒有選擇PHP去實現功能(雖然Xdebug有Session這樣的概念)。同時,我也沒選擇編譯型語言——C/C++去實現。因為編譯型需要需要在不同平臺上編譯出結果。而我希望提供的是一個可以直接使用的產品,所以編譯型語言也不合適。而Python是一個廣泛使用的工具性腳本語言,學習門檻低、且有大量組件可以直接使用,可以避免我們重復造輪子。
  • Python去實現一個Http服務器,提供一個調試界面。Python實現Http服務器的代碼非常簡單,網上一搜一大堆。但是這個地方的難點就是調試界面的設計
? ? ? ? 一個重要的功能就是PHP文件分析和著色。然后修改相關著色部分的點擊事件,讓其在右側區域展現出來。我對這塊不是特別了解,但是可以在網上找到相關資料http://www.oschina.net/project/tag/172/wysiwyg?lang=22&os=0&sort=view。其中有一款應該使我們需要使用和定制的。
  • 打通debugwebserver和Xdebug。Xdebug的的調試協議是https://xdebug.org/docs-dbgp.php。實現協議是件很麻煩的事情,因為不僅要實現還要去調試各種場景。好在Python有相關實現。我找到一個我們可能可以使用的實現http://jaredforsyth.com/pydbgp/。但是這個實現沒有給出使用的例子,所以這塊也將是一個比較復雜的過程——我們可能要用它去模擬每個指令,然后打通它和我們的服務器。

? ? ? ? 大家對上面的想法有什么意見和建議請和我反饋,如果有特別想去攻關的技術或者特別想實現的功能,我們可以商量怎么一起去做。

? ? ? ? 謝謝。? ?

? ? ? ? 這封郵件基本展現了這個項目立項時的背景。而在之后調研和實現的過程中,我也是按著這封郵件的思路去實施,其中若干的復雜點也是一點一點被攻克。其實這封郵件隱藏了我當時的一個疑慮——界面的實現,因為我并不擅長做網頁,更不擅長做界面設計。但是最后我還是逼著自己把這塊給攻克了下來,當然這些都是后話。在詳細介紹這個工具誕生過程和使用方法前,我先把其目前相對穩定的版本展現給大家看。希望能吸引大家的注意,如果有興趣,可以一起把這個項目完善。



總結

以上是生活随笔為你收集整理的跨平台PHP调试器设计及使用方法——立项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。