2010-02-17 9 views
0

PHP에서 메모리 손상 문제가 발생한 것 같습니다. 5.3 런타임에 포팅 할 큰 코드베이스가 있습니다. segfaults 및 "zend_mm_heap corrupted"오류가 발생하지만 이러한 지점의 백 트레이스는 유용하지 않습니다. 백 트레이스는 항상 변수 할당이나 연결과 같은 다양한 핵심 PHP 함수로 연결됩니다.Valgrind로 PHP 메모리 손상 디버그

내가 아는 한, PHP의 메모리는 segfaults/heap 손상 오류가 발생하기 전에 어느 시점에서 손상되고 있습니다.

나는 bugs.php.net/bugs-getting-valgrind-log.php의 지침을 따라 갔으며 꽤 큰 valgrind 로그를 생성했다. "조건부 점프 또는 이동은 초기화되지 않은 값에 의존합니다"와 같은 많은 오류로 가득 차 있습니다. 그 valgrind 로그에는 많은 정보가 있기 때문에, 나는 진정한 결함이 무엇인지, 그리고 정상적인 행동은 무엇인지 잘 모릅니다.

다음은 Valgrind의 출력의 일부입니다 : http://pastie.org/private/exngtften3jeppqyjn4hw 당신이 게시 오류

답변

0

모든 초기화되지 않은 값을 사용합니다. valgrind 옵션 --track-origins=yes (valgrind 3.4.0에 추가됨)을 사용하여 초기화되지 않은 채로 사용되는 값의 출처를 표시합니다. 더 느리게 실행되고 더 많은 메모리를 사용하지만 초기화되지 않은 값을 사용하는 데 유용한 정보를 훨씬 많이 표시 할 수 있습니다.

+0

의견에 감사드립니다. 문제를 mbstring 확장과 관련된 문제로 분리 할 수있었습니다. 문제를 정확하게 지적하지는 못했지만 지금은 mbstring없이 진행할 수 있습니다. – achristi