PHP でのセグメンテーション違反の解決策: 最初に "ulimit -a" を確認し、次にコア ファイルのサイズを制限しないように "ulimit -c unlimited" を設定し、次に gdb を使用してプログラムを実行し、セグメンテーション違反によって記録されたファイル; 最後に指定する コア ファイルのサイズは十分です。
Linux 上の C プログラムでは、メモリアクセスエラーなどによりセグメントフォルトが発生することが多く、このときシステムコアダンプ機能が有効になっていると、メモリ イメージがハードディスクにダンプされ、gdb を使用してコア ファイルを分析し、システム セグメンテーション フォールトが発生したときのスタック状況を復元できます。これはプログラムのバグを見つけるのに非常に役立ちます。
システム コア ファイルのサイズ制限を表示するには、ulimit -a を使用します。システムが生成できるコア ファイルのサイズを設定するには、ulimit -c [kbytes] を使用します。
ulimit -c 0 はコア ファイルを生成しません
ulimit -c 100 は最大コア ファイルを 100k に設定します
ulimit -c unlimited はコア ファイル サイズを制限しません
手順:
1. セグメンテーション違反が発生した場合、ulimit -a (core file size (blocks, -c) 0) を確認しますが、ファイルがありません。
2. 設定: ulimit -c unlimited はコア ファイル サイズを制限しません。
3. プログラムを実行すると、セグメンテーション違反が発生すると、自動的にコアに記録されます (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.どの行が間違っているか指摘してもらえますか?
多くのシステムのデフォルトのコア ファイル サイズは 0 です。コア ファイルのサイズを指定するには、シェル起動スクリプト /etc/bashrc または ~/.bashrc に ulimit -c コマンドを追加します。生成することができます。
また、/proc/sys/kernel/core_pattern にコアファイルのファイル名テンプレートを設定することもできます。詳細はコアの公式マニュアルを参照してください。
関連紹介:
Linux ulimit コマンドは、シェル プログラムのリソースを制御するために使用されます。
ulimit はシェルの組み込みコマンドであり、シェル実行プログラムのリソースを制御するために使用できます。
構文
ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]
パラメータ:
-a 現在のリソース制限設定を表示します。
-c コアファイルの最大値をブロック単位で設定します。
-d プログラム データ セクションの最大値 (KB 単位)。
-f 419b56d0c6f08affffb00e1dbe48c1de シェルが作成できる最大のファイル (ブロック単位)。
-H リソースのハード制限を設定します。これは、管理者によって設定された制限です。
-m 使用可能なメモリの上限を KB 単位で指定します。
-n 同時に開くことができるファイルの最大数を指定します。
-p パイプ バッファのサイズを 512 バイトで指定します。
-s スタックの上限を KB 単位で指定します。
-S リソースの柔軟な制限を設定します。
-t
-u ユーザーが開くことができるプログラムの最大数。
-v 使用できる仮想メモリの上限を KB 単位で指定します。
関連知識の詳細については、PHP 中国語 Web サイト をご覧ください。
以上がphp 拡張機能でセグメンテーション違反が発生した場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。