it-gundan.com

PHP에서 세그먼테이션 결함을 추적 하시겠습니까?

PHP (Apache 오류 로그에보고 된)에서 세그먼테이션 오류를 추적하는 비교적 고통스럽지 않은 방법을 찾고 있습니다. 이것은 현재 LAMP 설정입니다.

리눅스 : OpenSUSE 11.3 x86_64
아파치 : 2.2.15-3.7
MySQL : 5.1.46-2.18
PHP : 5.3.2-1.31

문제의 코드는 내 코드가 아니며 Gallery2입니다. http://gallery.menalto.com 일반적인 시나리오는 갤러리 기본 페이지로 이동하고 축소판 그림이 나타나지 않지만 오류 로그에 새로운 세그먼테이션 오류 오류 세트.

해당 소프트웨어가 상대적으로 복잡하기 때문에 간단한 디버깅 형태에는 적합하지 않습니다. 코드를 단계별로 진행하고 정확히 무슨 일이 일어나고 있는지 확인하고 싶습니다. "지금까지 본 솔루션"은 "상대적으로 고통스럽지 않은"것과는 거리가 멀었습니다.

이 서버 (이전 버전의 LAMP 소프트웨어 패키지)와 다른 서버에서 Gallery2를 성공적으로 사용 했으므로 현재 구성에 결함이 있다고 가정하지만 결함이 발생한 위치를 알 수 없으면 해결하거나 해결하십시오.

3
S. W.

http://sourceforge.net/tracker/index.php?func=detail&aid=1692166&group_id=7130&atid=1071http://gallery.menalto.com/ node/62436 # comment-22857 ?

Apache_setenv를 사용하거나 URL을 두 번 gzipping하는 데 일반적인 문제가있는 것 같습니다 (시나리오에 따라 썸네일이 나타나지 않을 가능성이 높습니다).

문제는 mod_deflate가 URL을 기반으로 두 번째로 데이터를 압축하려고 시도하여 일부 시스템이 손상되는 것입니다. 우리가 보내는 파일을 압축하지 말라고하면이 경우 도움이됩니다.


PHP에 버그가있을 수 있습니다. $gallery->setConfig('apacheSetenvBroken', 1);을 config.php에 추가하여 Apache_setenv () 함수 사용을 비활성화하십시오

이것이 당신이 묻는 질문에 대한 대답이 아니라는 것을 이해하십시오 (플러그인 또는 명령 줄 php 및 gdb와 함께 Zend Framework 사용을 제외하고는 PHP에서 segfaults를 디버깅하는 방법을 모르겠습니다).

2
Metalshark

PHP segfaults를 디버깅하려면 일반적으로 다음과 같이 새 .php 파일 (기본 코드를 방해하지 않도록)을 작성합니다 (my_first_debugger.php).

<?php
include('annoying_caller_page_that_crashes.php');
?>

그런 다음 gdb php를 실행하십시오. gdb가 설치되어 있지 않거나 gdb/php 바이너리가 경로에 없으면 오류가 발생하므로 YaST2를 사용하여 필요한 모든 것을 설치하십시오. 디버깅 기호).

다음과 같이 출력됩니다.

GNU gdb x.x
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
(gdb) 

그런 다음 명령 행에서 run my_first_debugger.php를 수행하십시오.

(no debugging symbols found)와 같은 메시지가 있거나 호출중인 함수의 이름이 보이지 않으면 -dev 및 -dbg 패키지를 찾으십시오.

0
Metalshark