Отсутствуют имена функций при открытии файла CacheGrind в WinCacheGrind
Ад все. Я установил XDEBUG на сервер apache/php в качестве модуля ZEND. Он выводит файлы профилирования, но вывод не содержит имен функций, только цифры.
Я не похож на другие файлы вывода cachegrind. Мои файлы имеют номера вместо имен функций / файлов.
Если я пытаюсь использовать WinCacheGrind, чтобы открыть файл, получается ошибка. Также я установил webgrind и вывод показывает только цифры. Иногда есть имя файла, но перед именем файла стоит номер. Нажатие на него приводит к ошибке.
версия: 1 создатель: xdebug 2.3.2 cmd: /backup/united/public_html/member.php часть: 1 позиция: строка
события: время
fl=(1) php:internal
fn=(1) php::define
7 5
fl=(1)
fn=(1)
51 3
fl=(1)
fn=(1)
52 1
fl=(1)
fn=(1)
53 1
fl=(1)
fn=(1)
54 1
fl=(1)
fn=(1)
55 1
fl=(1)
fn=(1)
57 1
fl=(1)
Посмотреть изображение Webgrind
2 ответа
Я обнаружил, что Xdebug 2.3.2 имеет новый формат, который не совместим с webgrind и другими визуализаторами. Вот почему визуализация не включает имена функций.
Однако он совместим с QCacheGrind 0.7.4. Я установил его и обнаружил источник низкой производительности на веб-сервере.
Начиная с XDebug 2.3 дублированные имена файлов и функций были заменены числами, чтобы сэкономить место, поэтому убедитесь, что формат cachegrind поддерживает сжатие "имя файла" и "имя функции".
Смотрите: Профилирование PHP-скриптов на XDebug
Пользователи Windows могут альтернативно использовать WinCacheGrind. Функциональность отличается от KCacheGrind, поэтому раздел, описывающий использование KCacheGrind на этой странице, не относится к этой программе. WinCacheGrind в настоящее время не поддерживает сжатие файлов и функций для файлов cachegrind, которые Xdebug 2.3 представляет.
Для получения дополнительной информации о сжатии имени, проверьте Спецификацию формата Callgrind. Вот несколько кратких:
С введением спецификаций ассоциации, таких как вызовы, необходимо указывать одну и ту же функцию или одно и то же имя файла несколько раз. Поскольку абсолютные имена файлов или имен символов в C++ могут быть довольно длинными, полезно иметь возможность указывать целочисленные идентификаторы для определения местоположения. Здесь термин "позиция" соответствует имени файла (исходный или объектный файл) или имени функции.
Чтобы поддерживать сжатие имени, указание позиции может быть не только формата
spec=name
", но также "spec=(ID) name
"указать отображение целочисленного идентификатора на имя и"spec=(ID)
"для ссылки на ранее определенное сопоставление идентификаторов. Для каждой спецификации позиции существует отдельное сопоставление идентификаторов, т.е. вы можете использовать идентификатор 1 как для имени файла, так и для имени символа.
Проверьте также статус этих отчетов об ошибках:
- Wingrind не понимает сжатые имена файлов и функций
- XDebug 0001054: файлы профилировщика должны поддерживать имя файла, сжатие имени функции
- XDebug 0001115: Профилировщик не выводит имя файла или значения функции
- Pull Req на XDebug: Реализация проблемы #1054: Поддержка профилировщика для сжатия имени файла и имени функции