假設線上有一段php腳本,突然在某天出問題了,不處理但是進程沒有退出。這種情況可能是異常休眠或是有段死循環程式碼,但是我們要怎麼定位呢,我們這個時候最想知道的應該是這個腳本在此刻在做什麼吧。這個是gdb zbacktrace就有用了。
先隨便寫一個測試腳本test.php,裡面就寫一個sleep函數,換成死迴圈也可以。
<?phpfunction Mecho($i){ echo $i.PHP_EOL; }$i = 20;while($i>0){if($i%2==0){ Mecho($i); }sleep(100000);$i--; }
zbacktrace下載php原始碼包裡面就有,目前我的環境是新裝的,目前的php版本是php7.2.9
直接cli執行test.php
php test.php
接著找到目前php行程
# 然後用gdb調試
gdb -p 56571
調試
source /usr/local/src/php-7.2.9/.gdbinit zbacktrace
這個時候就知道了是在test.php的11行sleep函數所導致的進程sleep。
相關教學:PHP影片教學
#以上是gdb調試php輕鬆找到目前執行的程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!