ScarShow

< IS >

Pointless 所遭遇到的 Segmentation Faults

2014-02-21  /  IT  /  PHP Pointless

怪事

在開發Pointless到現在的兩年期間內,初期其實都還算順利,直到最近幾個月遇到了兩次Segmentation Fault,終於我遇的不是PHPSyntax Error,而是PHPBugs或是其中函式庫的問題。

寫直譯式語言可以遇到語言的錯誤還滿猛的,一次是在OS X上用PHPBrew編出的PHP,另一次就是最近在Ubuntu 13.10Ubuntu 12.04 LTS上還是用PHPBrew所編出的PHP

題外話,話說PHPBrew超好用的,可以在不同版本的下作切換,對於開發來說實在是很棒。

在OS X的那次

我先後在不同的兩台Mac Air測試過都會發生錯誤,在文章數量小的情況下不會有問題,但是文章只要一多就會發生錯誤。

而出錯的地方就是用來將資料及樣板結合的bindData()其中只有include以及Output Buffer等函式,但我檢查不出是PHP VM編譯時的哪支有問題所以作罷。

還因為這樣,當時還有人評論說這個部落格只要文章超過140字元就會爆炸。但這不是我的錯,這一定有誤會。

在Ubuntu的這次

最近,其實就是上禮拜,我再忙著把Pointless升級成支援PHP 5.4所以將系統中PHP 5.4.12升級到PHP 5.4.25以及PHP 5.5.5升級到PHP 5.5.9

但是PHP./configure的時候會出現configure: error: Could not find libpcre.(a|so) in /usr而失敗,把出現問題的檔案補上後,可以正常編譯了。

當我正開心要作測試的時候,他就爆了。這次的問題出現在剛剛的PCRE Library上,只要我在程式中使用preg_match()然後所輸入的字串太長就會爆炸。

所以我就重新編譯了新的PCRE Library,想當然爾./configure還是找不到檔案,手動補上檔案後在同樣的地方還是爆了...。最後我在另外一台機器上編譯同樣的檔案,使用同樣的./configure設定結果還是一樣。

結論

Mac OS X系統預設的函式庫跟我正常使用的Ubuntu一定有哪邊不一樣。

Ubuntu幾個月前的所使用的函式庫跟現在跟更新後的Ubuntu的函式庫一定有哪邊不一樣。

到底哪裡不一樣?我還要再查查。