php出現段錯誤的解決方法:先查看「ulimit -a」;然後設定「ulimit -c unlimited」不限制core檔案大小;接著使用gdb執行程式和段錯誤記錄的檔案;最後指定core檔案大小即可。
Linux下的C程式常常會因為記憶體存取錯誤等原因造成segment fault(段錯誤)此時如果系統core dump功能是開啟的,那麼將會有記憶體映像轉儲到硬碟上來,之後可以用gdb對core檔進行分析,還原系統發生段錯誤時刻的堆疊情況。這對於我們發現程式bug很有幫助。
使用ulimit -a可以檢視系統core檔案的大小限制;使用ulimit -c [kbytes]可以設定係統允許產生的core檔案大小。
ulimit -c 0 不產生core檔
ulimit -c 100 設定core檔最大為100k
ulimit -c unlimited 不限制core檔大小
步驟:
1、當發生段錯誤時,我們查看ulimit -a (core file size (blocks, -c) 0)並沒有文件,
# 2.設定:ulimit -c unlimited 不限制core檔案大小
3、運行程序,發生段錯誤時會自動記錄在core中(php -f WorkWithArray.php)
#4、 ls -al core.* 在那個檔案下(-rw------- 1 leconte leconte 139264 01-06 22:3 1 core.2065)
5、使用gdb 執行程式和段錯誤記錄的文件。 (gdb ./test core.2065)
6、會提哪一行有錯。
很多系統預設的core檔案大小都是0,我們可以透過在shell的啟動腳本/etc/bashrc或~/.bashrc等地方加入ulimit -c 指令來指定core檔案大小,從而確保core檔案能夠產生。
除此之外,還可以在/proc/sys/kernel/core_pattern裡設定core檔的檔名模板,詳情請看core的官方man手冊。
相關介紹:
Linux ulimit指令用來控制shell程式的資源。
ulimit為shell內建指令,可用來控制shell執行程式的資源。
語法
ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]
參數:
-a 顯示目前資源限制的設定。
-c 1ec14d16c186e5ea7747aa4b434ecaa9 設定core檔案的最大值,單位為區塊。
-d 6730e500ebe6ea819573763ba5a79bfc 程式資料節區的最大值,單位為KB。
-f 5951ca54548643a2cfbe252f8d1e4b60 shell所能建立的最大文件,單位為區塊。
-H 設定資源的硬性限制,也就是管理員所設下的限制。
-m 7fffec8e415b4eafaa98b67edc18bb1d 指定可使用記憶體的上限,單位為KB。
-n 642a930eb03864c66ce3fd56cdfb9ddb 指定同一時間最多可開啟的檔案數。
-p a88382a1e461e88578ac8a7acd47a25a 指定管道緩衝區的大小,單位512位元組。
-s 7b4e9dd703502340a370a64759d9601b 指定堆疊的上限,單位為KB。
-S 設定資源的彈性限制。
-t 7c1a30d2472b570cfb13e3985f004b41 指定CPU使用時間的上限,單位為秒。
-u 3fb4b6406b214c3989b8163d66799f17 使用者最多可開啟的程式數目。
-v 2d525106a64a8c78e2210fbc8ec33102 指定可使用的虛擬記憶體上限,單位為KB。
更多相關知識,請造訪PHP中文網!
以上是php擴充出現段錯誤怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!