aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs/dev
diff options
context:
space:
mode:
Diffstat (limited to 'docs/dev')
-rw-r--r--docs/dev/php-rpc.md3
-rw-r--r--docs/dev/xdebug.md28
2 files changed, 30 insertions, 1 deletions
diff --git a/docs/dev/php-rpc.md b/docs/dev/php-rpc.md
index 314386d8..8418db88 100644
--- a/docs/dev/php-rpc.md
+++ b/docs/dev/php-rpc.md
@@ -11,7 +11,8 @@ domain socket. There is exactly one child process per Shirabe process, shared by
The existing `PhpExecutableFinder` class resolves the PHP binary. The child is started with
`-d serialize_precision=-1` so the wire codec's float formatting is pinned to the default PHP
-behavior.
+behavior, and with `-d xdebug.mode=off` unless `COMPOSER_ALLOW_XDEBUG` asks for Xdebug to stay
+(see `xdebug.md`).
## Transport
diff --git a/docs/dev/xdebug.md b/docs/dev/xdebug.md
new file mode 100644
index 00000000..be198cca
--- /dev/null
+++ b/docs/dev/xdebug.md
@@ -0,0 +1,28 @@
+# Xdebug
+
+Composer restarts itself without Xdebug loaded, because Xdebug makes PHP
+several times slower. Shirabe is written in Rust, where Xdebug does not exist,
+but it invokes a PHP command for plugins, scripts and platform queries.
+When Shirabe spawns a PHP worker, Xdebug is disabled as Composer does.
+
+The PHP worker is spawned with the `-d xdebug.mode=off` flag and the
+`XDEBUG_MODE=off` environment variable. The way to disable Xdebug in Shirabe is
+different from Composer: Composer restarts its own process with a temporary
+INI file, where Xdebug extension is disabled. The difference probably does not
+matter, both for users and for plugin authors.
+
+## Enable Xdebug in Shirabe's PHP worker
+
+It is the same as Composer: setting `COMPOSER_ALLOW_XDEBUG` to 1 makes Shirabe
+leave Xdebug enabled.
+
+```
+$ COMPOSER_ALLOW_XDEBUG=1 shirabe install
+```
+
+## Xdebug 2 support
+
+Shirabe does not try to disable Xdebug version 2 because Xdebug 2 has no
+`xdebug.mode` or `XDEBUG_MODE`, while Composer disables Xdebug 2 too. The
+performance penalty seems to be small as Shirabe's CPU-heavy workloads are
+written in Rust.