xdebug_start_trace ведет себя странно - PullRequest
0 голосов
/ 03 февраля 2011

Я пытаюсь уменьшить использование памяти скриптов еще больше.Я пытаюсь заставить мой скрипт генерировать вывод с помощью xdebug для анализа использования памяти.Это скрипт на основе CLI имеет shebang

#!/usr/local/bin/php -q

Я передаю ему параметр и проверяю его с помощью

$argc > 1 && is_numeric( $argv[1] )

Когда я вхожув ssh и сделайте ./script.php 90 и добавьте этот код,

if( $argv[1] == 90 ) {
       xdebug_start_trace('/var/www/html/logs/' . rand(1,9999999) );
}

Я вижу выходной файл в папке logs.

Но когда я помещаю xdebug_start_trace без оператора if в производственный скрипт, выходной файл не создается.

script.php вызывается из другого php-файла, помещенного в другую папку, поэтому я использую абсолютный путь в имени файла и вызываю его с помощью exec и добавляю &> /dev/null & к нему, чтобы он выполнялся вфон.

Это сводит меня с ума!Помогите, ребята!

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Не знаю, почему это произошло, но я получил ошибку

PHP Notice: Function trace already started in /var/www/html/script.php on line 9 [Проверить "Изменить" для информации]

Хотя нет кода, который вызывает это xdebug_start_trace();.

Так что я поставил xdebug_stop_trace(); перед xdebug_start_trace();, все отлично работает.

Странно.

Edit: я получаю вышеупомянутую ошибку, поскольку я установил auto_trace на On в php.ini

Также выясняется, что если вы добавляете &> /dev/null & к команде, журнал xdebug не создается. Однако, если я сделаю &> /dev/null (обратите внимание на последнее &), xdebug генерирует журналы. Это, вероятно, связано с пользовательским выводом, который xdebug должен использовать внутри. Не уверен, однако.

0 голосов
/ 04 февраля 2011

Ты имеешь в виду ...

if( $argv[1] == 90 ) {
       xdebug_start_trace('/var/www/html/logs/' . rand(1,9999999) );
}

... приводит к файлу трассировки и ...

xdebug_start_trace('/var/www/html/logs/' . rand(1,9999999) );

... просто пропущенное условное заявление ничего не дает?

И я действительно не могу поверить, что трассировка начинается не откуда ... так что где-то должен быть вызов функции. Принимая во внимание ваше описание, кажется, что ваша установка довольно испорчена. Так что я не думаю, что ваша проблема каким-либо образом связана с XDebug, но этот феномен следа - просто случайный симптом, который вы должны заметить.

Попробуйте настроить сценарий, который будет настолько простым, насколько это возможно, и все же даст вам это. Затем опубликуйте еще раз, что происходит, потому что ваше описание также довольно запутанно ИМХО.

Best

Раффаэль

...