gdb偵錯php輕鬆找到當前執行的程式碼

2020-07-16 10:05:33
假設線上有一段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輕鬆找到當前執行的程式碼的詳細內容,更多請關注TW511.COM其它相關文章!