У меня есть сценарий CLI, написанный на PHP, который я пытаюсь отладить с помощью XDebug. Отладчик работает, так как я могу пройти по коду при инициализации, но он выходит из строя после того, как процесс разветвляется, становится демоном и позволяет исходному процессу завершиться. Моя теория заключается в том, что сокет XDebug закрывается, когда завершается начальный процесс, что оставляет демона и любые процессы, которые он разветвляет, без открытого сокета моему слушателю XDebug.
Соединения с базой данных можно переподключить или даже создать после разветвления, но XDebug, по-видимому, не имеет такой опции в своем списке функций. Может ли сокет XDebug пережить исходный процесс при выходе или быть восстановлен после вызова pcntl_fork ()? Есть ли обходной путь для этого?
Нет, Xdebug не обрабатывает сокеты, которые охватывают несколько процессов. Ваша теория в некотором роде верна. Сокет просто не может быть легко дублирован на вилке, и Xdebug не обрабатывает это в настоящее время. Сокет также закрывается, когда процесс заканчивается.
Есть проблема (https://bugs.xdebug.org/view.php?id=938), который вы прокомментировали. Это можно исправить — я проделал аналогичную работу со старым расширением MongoDB — но он не входит в мой список приоритетов.
Других решений пока нет …