Отладка повреждения памяти PHP с помощью Valgrind - PullRequest
1 голос
/ 17 февраля 2010

Я столкнулся с проблемой повреждения памяти в PHP. У меня большая база кода, которую я портирую на 5.3. Я получаю ошибки segfaults и «zend_mm_heap поврежден», но обратные следы от этих точек бесполезны. Обратные следы всегда приводят к различным основным функциям PHP, таким как назначение переменных или объединение.

Насколько мне известно, память PHP в какой-то момент повреждается до того, как происходят ошибки повреждения сегмента / кучи.

Я следовал инструкциям на bugs.php.net/bugs-getting-valgrind-log.php и сгенерировал довольно большой журнал valgrind. Он заполнен многими ошибками, такими как «Условный переход или перемещение зависит от неинициализированного значения». Поскольку в этом журнале valgrind содержится так много информации, я не уверен, что является истинным дефектом и что является нормальным поведением.

Вот часть вывода valgrind: http://pastie.org/private/exngtften3jeppqyjn4hw

1 Ответ

1 голос
/ 17 февраля 2010

Все опубликованные вами ошибки являются использованием неинициализированных значений. Используйте параметр valgrind --track-origins=yes (добавлен в valgrind 3.4.0), чтобы показать источник значения, которое в конечном итоге используется неинициализированным. Он будет работать медленнее и использовать больше памяти, но может показать гораздо больше полезной информации для использования неинициализированных значений.

...