Xdebug_start_trace ведет себя странно

Я пытаюсь уменьшить использование памяти script еще больше. Я пытаюсь сделать свой вывод script с помощью xdebug для анализа использования памяти. Это CLI на основе script имеет 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 в production script, выходной файл не создается.

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

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

Ответ 1

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

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

Хотя, не существует кода, запускающего этот xdebug_start_trace();.

Итак, я положил xdebug_stop_trace(); до xdebug_start_trace();, все работает нормально.

Странно.

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

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

Ответ 2

Вы имеете в виду...

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, но это явление трассировки - это просто случайный симптом, который вы заметили.

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

Лучшие

Раффаэль