>  기사  >  백엔드 개발  >  PHP 확장 프로그램에서 세그폴트가 발생하면 어떻게 해야 할까요?

PHP 확장 프로그램에서 세그폴트가 발생하면 어떻게 해야 할까요?

藏色散人
藏色散人원래의
2020-07-11 09:24:422999검색

PHP의 segfault에 대한 해결책: 먼저 "ulimit -a"를 확인한 다음 코어 파일 크기를 제한하지 않도록 "ulimit -c unlimited"를 설정한 다음 gdb를 사용하여 segfault에 의해 기록된 파일을 실행합니다. 코어 파일 크기를 지정할 수 있습니다.

PHP 확장 프로그램에서 세그폴트가 발생하면 어떻게 해야 할까요?

Linux의 C 프로그램은 메모리 액세스 오류 및 기타 이유로 인해 세그먼트 오류가 발생하는 경우가 많습니다. 이때 시스템 코어 덤프 기능이 켜져 있으면 메모리 이미지가 하드 디스크에 덤프됩니다. 시스템 분할 오류가 발생하면 gdb를 사용하여 코어 파일을 분석하고 스택 상황을 복원할 수 있습니다. 이는 프로그램 버그를 찾는 데 매우 도움이 됩니다.

시스템 코어 파일의 크기 제한을 보려면 ulimit -a를 사용하고, 시스템이 생성할 수 있는 코어 파일의 크기를 설정하려면 ulimit -c [kbytes]를 사용하세요.

ulimit -c 0은 코어 파일을 생성하지 않습니다

ulimit -c 100은 최대 코어 파일 크기를 100k로 설정합니다.

ulimit -c unlimited는 코어 파일 크기를 제한하지 않습니다

단계:

1. segfault가 발생하면 ulimit -a(코어 파일 크기(블록, -c) 0)를 확인하고 파일이 없습니다.

2. 설정: ulimit -c unlimited는 코어 파일 크기를 제한하지 않습니다

3. , 그리고 세그폴트가 발생하면 자동으로 In 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. 어느 줄이 잘못되었는지 언급하겠습니다.

많은 시스템의 기본 코어 파일 크기는 0입니다. 코어 파일이 생성될 수 있도록 쉘 시작 스크립트 /etc/bashrc 또는 ~/.bashrc에 ulimit -c 명령을 추가하여 코어 파일 크기를 지정할 수 있습니다. .

또한 /proc/sys/kernel/core_pattern에서 코어 파일의 파일 이름 템플릿을 설정할 수도 있습니다. 자세한 내용은 코어의 공식 man 매뉴얼을 참조하세요.

관련 소개:

Linux ulimit 명령은 쉘 프로그램의 자원을 제어하는 ​​데 사용됩니다.

ulimit는 셸에 내장된 명령으로, 셸 실행 프로그램의 리소스를 제어하는 ​​데 사용할 수 있습니다.

Syntax

ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]

매개변수:

-a 현재 리소스 제한 설정을 표시합니다.

-c 4c5d524135b4cbbbebaf08d1c8126746 코어 파일의 최대값을 블록 단위로 설정합니다.

-d 0c08e9a70448db8aaa58b536187ed462 프로그램 데이터 섹션의 최대 크기(KB)입니다.

-f 07fddc2e3b999215c3db34389a74acaa 쉘이 생성할 수 있는 가장 큰 파일(블록)입니다.

-H 리소스의 하드 제한을 설정합니다. 이는 관리자가 설정한 제한입니다.

-m b21d0af43d2ff060831a064917bcd0da 사용 가능한 메모리의 상한을 KB 단위로 지정합니다.

-n 52969040d74b4ed4f35bf09bb2732eed 동시에 열 수 있는 최대 파일 수를 지정합니다.

-p 8edc7cfa23fd8b237e6a35701015e7cf 파이프 버퍼의 크기를 512바이트 단위로 지정합니다.

-s 5848343f38a10a724c8814e0b4bf628a 스택의 상한을 KB 단위로 지정합니다.

-S 자원의 유연한 제한을 설정합니다.

-t fbfbe4e76445bd735c51a82e7a9fb6eb CPU 사용 시간의 상한을 초 단위로 지정합니다.

-u e383fe602417ac7d10b18230c90c7975 사용자가 열 수 있는 최대 프로그램 수입니다.

-v 4904d02eff5f509700982055265fdf06 사용할 수 있는 가상 메모리의 상한을 KB 단위로 지정합니다.

더 많은 관련 지식을 알고 싶으시다면 PHP 중국어 홈페이지를 방문해주세요!

위 내용은 PHP 확장 프로그램에서 세그폴트가 발생하면 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.