-The full list of changes can be found on the
-updates page.
-
-
-
-The source code can be found on the
-downloads page, and as
-usual, Xdebug is installable through PECL and PIE, and is also available as package
-for most Linux distributions.
-
-
-
-If you find a bug, please file a report at Xdebug's
-Issue Tracker.
-
-
-
-ENDTXT;
-
- file_put_contents( "{$xdebugOrgRepo}/data/news/{$date}.html", $text );
-
- $cwd = getcwd();
- chdir( $xdebugOrgRepo );
- shell_exec("git add data/news/{$date}.html");
-
- chdir( $cwd );
-}
-
-$r = findVersion( $p_info, $release_version );
-if ( $r === false )
-{
- /*
- createVersion( $project_id, $release_version );
- $r = findVersion( $p_info, $release_version );
- */
- die("The version {$release_version} does not exist");
-}
-
-echo "Existing version {$release_version}\n";
-
-echo "Checking date: ";
-$version_date = preg_match( '/^(20.*)T/', $r->timestamp, $m );
-if ( ! $version_date || $m[1] != date('Y-m-d') )
-{
- echo "\nUpdate version with right date:\nhttps://bugs.xdebug.org/manage_proj_ver_edit_page.php?version_id={$r->id}\n";
-}
-else
-{
- echo "OK\n";
-}
-
-$issues = getAllFixedIssuesForVersion( $r->id );
-if ( count( $issues) == 0 )
-{
- die("There are no issues for version {$release_version}");
-}
-
-updateGIT( $from_master );
-updateTemplateRC( $release_version );
-updatePhpXdebugH( $release_version );
-rebuild();
-updateIniFileInDocs();
-
-echo "\nRun the following commands:\n\n";
-
-peclPackage();
-installPeclPackage( $release_version );
-showGitCommands( $release_version );
-
-writePackageXMLInclusion( $release_version, $issues );
-createUpdatesSection( $release_version, $issues );
-
-if ( $stability === 'stable' )
-{
- createXdebugVersionPhp( $release_version );
-}
-updateDocsController( $release_version );
-createNewsTemplate( $release_version );
-
-echo "\nSet version 'release' to 'true':\nhttps://bugs.xdebug.org/manage_proj_ver_edit_page.php?version_id={$r->id}\n";
diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index e2ea3e3..0000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,176 +0,0 @@
-version: 2.1
-commands:
- compile:
- description: Compiles and sets-up common environment vars
- steps:
- - checkout
- - run: ./.build.scripts/compile.sh
- - run:
- name: Setup env vars
- command: |
- echo 'export CWD=`eval echo "${CIRCLE_WORKING_DIRECTORY}"`' >> $BASH_ENV
- compile-no-zlib:
- description: Compiles and sets-up common environment vars
- steps:
- - checkout
- - run: ./.build.scripts/compile.sh --without-xdebug-compression
- - run:
- name: Setup env vars
- command: |
- echo 'export CWD=`eval echo "${CIRCLE_WORKING_DIRECTORY}"`' >> $BASH_ENV
- run-tests:
- description: Runs the tests
- steps:
- - run:
- name: Run tests with env vars
- command: php run-xdebug-tests.php -j8 -q -x --show-diff
-
-jobs:
- "PHP 8 3 without opcache":
- docker:
- - image: cimg/php:8.3.12
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 3 with opcache":
- docker:
- - image: cimg/php:8.3.12
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=opcache.so -d opcache.enable=1 -d opcache.enable_cli=1 -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 2 without opcache":
- docker:
- - image: cimg/php:8.2.24
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile-no-zlib
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 2 with opcache":
- docker:
- - image: cimg/php:8.2.24
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=opcache.so -d opcache.enable=1 -d opcache.enable_cli=1 -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 1 without opcache":
- docker:
- - image: cimg/php:8.1.30
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 1 with opcache":
- docker:
- - image: cimg/php:8.1.30
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=opcache.so -d opcache.enable=1 -d opcache.enable_cli=1 -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 0 without opcache":
- docker:
- - image: cimg/php:8.0.30
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
- "PHP 8 0 with opcache":
- docker:
- - image: cimg/php:8.0.30
- auth:
- username: $DOCKERHUB_USER
- password: $DOCKERHUB_PW
- steps:
- - checkout
- - compile
- - run:
- name: Setup extra env vars
- command: |
- echo 'export TEST_PHP_ARGS="-n -d foo=yes -d zend_extension=opcache.so -d opcache.enable=1 -d opcache.enable_cli=1 -d zend_extension=${CWD}/modules/xdebug.so"' >> $BASH_ENV
- - run-tests
- environment:
- REPORT_EXIT_STATUS: 1
-
-workflows:
- version: 2
- testing:
- jobs:
- - "PHP 8 3 without opcache"
- - "PHP 8 3 with opcache"
- - "PHP 8 2 without opcache"
- - "PHP 8 2 with opcache"
- - "PHP 8 1 without opcache"
- - "PHP 8 1 with opcache"
- - "PHP 8 0 without opcache"
- - "PHP 8 0 with opcache"
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 234f816..a810fe1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -44,17 +44,17 @@ jobs:
- name: Build extension
run: |
phpize
- ./configure --enable-xdebug
+ ./configure --enable-php-debugger
make -j$(sysctl -n hw.logicalcpu 2>/dev/null || nproc)
- name: Verify extension loads
run: |
- php -dzend_extension=$PWD/modules/xdebug.so -v
- php -dzend_extension=$PWD/modules/xdebug.so -r "echo 'xdebug_info() works: ' . (function_exists('xdebug_info') ? 'yes' : 'no') . PHP_EOL;"
+ php -dzend_extension=$PWD/modules/php_debugger.so -v
+ php -dzend_extension=$PWD/modules/php_debugger.so -r "echo 'xdebug_info() works: ' . (function_exists('xdebug_info') ? 'yes' : 'no') . PHP_EOL;"
- name: Smoke test (DBGp)
run: |
- TEST_PHP_ARGS="-n -dzend_extension=$PWD/modules/xdebug.so"
+ TEST_PHP_ARGS="-n -dzend_extension=$PWD/modules/php_debugger.so"
echo "TEST_PHP_ARGS=$TEST_PHP_ARGS" >> $GITHUB_ENV
export TEST_PHP_ARGS
php -n run-xdebug-tests.php -q tests/debugger/bug00530.phpt
@@ -65,13 +65,13 @@ jobs:
PHP_VER=$(php -r "echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;")
OS_TAG=$(echo "${{ matrix.os }}" | sed 's/-latest//')
ARCH=$(uname -m)
- echo "artifact_name=xdebug-php${PHP_VER}-${OS_TAG}-${ARCH}" >> $GITHUB_OUTPUT
+ echo "artifact_name=php-debugger-php${PHP_VER}-${OS_TAG}-${ARCH}" >> $GITHUB_OUTPUT
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.info.outputs.artifact_name }}
- path: modules/xdebug.so
+ path: modules/php_debugger.so
retention-days: 90
build-windows:
@@ -101,29 +101,29 @@ jobs:
run: phpize
- name: configure
- run: configure.bat --enable-xdebug --with-prefix=${{ steps.setup-php-sdk.outputs.prefix }}
+ run: configure.bat --enable-php-debugger --with-prefix=${{ steps.setup-php-sdk.outputs.prefix }}
- name: nmake
run: nmake
- name: Verify extension loads
run: |
- php -dzend_extension=php_xdebug.dll -v
- php -dzend_extension=php_xdebug.dll -r "echo 'xdebug_info() works: ' . (function_exists('xdebug_info') ? 'yes' : 'no') . PHP_EOL;"
+ php -dzend_extension=php_debugger.dll -v
+ php -dzend_extension=php_debugger.dll -r "echo 'xdebug_info() works: ' . (function_exists('xdebug_info') ? 'yes' : 'no') . PHP_EOL;"
- name: Get build info
id: info
shell: bash
run: |
PHP_VER=$(php -r "echo PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;")
- echo "artifact_name=xdebug-php${PHP_VER}-windows-x64" >> $GITHUB_OUTPUT
+ echo "artifact_name=php-debugger-php${PHP_VER}-windows-x64" >> $GITHUB_OUTPUT
- name: Find DLL
id: find-dll
shell: pwsh
run: |
- $dll = Get-ChildItem -Recurse -Filter 'php_xdebug.dll' | Select-Object -First 1
- if (-not $dll) { Write-Error 'php_xdebug.dll not found'; exit 1 }
+ $dll = Get-ChildItem -Recurse -Filter 'php_debugger.dll' | Select-Object -First 1
+ if (-not $dll) { Write-Error 'php_debugger.dll not found'; exit 1 }
Write-Host "Found DLL at: $($dll.FullName)"
echo "dll_path=$($dll.FullName)" >> $env:GITHUB_OUTPUT
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 58ae5f5..28323fe 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -29,7 +29,7 @@ jobs:
- name: Compile
run: |
phpize
- ./configure --enable-xdebug
+ ./configure --enable-php-debugger
make -j$(nproc)
- name: Find PHP
@@ -44,7 +44,7 @@ jobs:
if [[ "${{ matrix.opcache }}" == "true" ]]; then
TEST_PHP_ARGS="$TEST_PHP_ARGS -d zend_extension=opcache.so -d opcache.enable=1 -d opcache.enable_cli=1"
fi
- TEST_PHP_ARGS="$TEST_PHP_ARGS -d zend_extension=$PWD/modules/xdebug.so"
+ TEST_PHP_ARGS="$TEST_PHP_ARGS -d zend_extension=$PWD/modules/php_debugger.so"
echo "Test PHP arguments: $TEST_PHP_ARGS"
echo "TEST_PHP_ARGS=$TEST_PHP_ARGS" >> $GITHUB_ENV
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
deleted file mode 100644
index 4c5e7ff..0000000
--- a/CONTRIBUTING.rst
+++ /dev/null
@@ -1,108 +0,0 @@
-Contributing
-============
-
-Xdebug is hosted on Github. The source code can be browsed there and can be
-checked out with::
-
- git clone https://github.com/xdebug/xdebug.git
-
-If you think you want to fix a bug or work on a new feature, then you need to
-follow the instructions below. Please reach out first to discuss your
-suggested changes as well.
-
-Initial Set-up
---------------
-
-- Fork Xdebug on GitHub.
-- Make sure you have configured your Author Name and Author Email with GIT.
- Xdebug doesn't accept contributions from accounts with unnatural names.
-- Clone the repository::
-
- git clone git@github.com:{your username}/xdebug.git
-
-- Change into the ``xdebug`` repository::
-
- cd xdebug
-
-- Add the original repository as ``upstream`` remote::
-
- git remote add upstream https://github.com/xdebug/xdebug.git
- git fetch upstream
-
-- Add a tracking branch for Xdebug 3.4::
-
- git checkout --track origin/xdebug_3_4
-
-Branches
---------
-
-There are two branches in operation:
-
-``master``
- This is were all new feature Pull Requests should be targeted at
-``xdebug_3_4``
- This is were all bug fix Pull Requests should be targeted at. The
- maintainer will add them to ``master`` too when merging the Pull Request.
-
-Working on a Pull Request
--------------------------
-
-- Make sure that your ``master`` and ``xdebug_3_4`` branches are up to date
- with the ``upstream`` repository.
-- Create an issue in the `issue tracker `_ (if none
- exists yet).
-- Switch to the right target branch (``master`` for features, ``xdebug_3_4``
- for bug fixes).
-- Create a feature branch::
-
- git checkout -b issue{issue number}-{description}
-
- For example::
-
- git checkout -b issue1893-crash-with-fiber
-
-- For a bug fix, write one or more test cases to verify that the problem
- currently exists, and also to define what the output should be. Xdebug uses
- PHP's `phpt tests `_. The ``README.rst``
- file contains information on how to run the tests.
-
- Each of Xdebug's modes has a specific directory where to place tests. For
- example, for code coverage that is ``tests/coverage``. Test case names
- should follow the following pattern::
-
- tests/{feature-group}bug0{issue-number}.phpt
-
- If you need more than one test, append ``-001`` after the issue number.
-
- Pull Requests without tests won't be accepted.
-
-- Fix and/or write the code.
-
-- Before you submit a PR, make sure each commit is a single logical unit. The
- main commit that implements the issue, should have as commit message ``Fixed
- issue #1893: `` followed by the Summary of the issue in the issue tracker. The
- message should state what the change was about. For example::
-
- Fixed issue #1893: Crash with ext-fiber with xdebug.mode=coverage
-
-- Before you submit a PR, make sure to rebase first on the branch that you
- will be targeting, for example to rebase against the current bug fix
- branch::
-
- git fetch upstream && git rebase upstream/xdebug_3_4
-
-- Push your changes to your remote repository::
-
- git push origin {branch-name}
-
- For example::
-
- git push origin issue1893-crash-with-fiber
-
-- Once you're satisfied, generate a pull request. Make sure that the title is
- in one line, it's fine if it's a few characters larger than what GitHub
- likes. Do not let the title spill over into the description with ``...```.
-
- In the description, explain what you changed, and why, and how your solution
- is the right one. Feel free to include questions, and pointers to specific
- things that need close review.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e425be7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,116 @@
+# PHP Debugger
+
+A lightweight, high-performance PHP debugger extension. Forked from [Xdebug](https://xdebug.org/) by Derick Rethans, stripped down to pure debugging, and optimized for near-zero overhead when inactive.
+
+## Why PHP Debugger?
+
+- **~10% overhead** when loaded but inactive (vs ~630% before optimization)
+- **Drop-in Xdebug replacement** — existing configs, IDE setups, and workflows work unchanged
+- **Debug-only** — no profiler, no coverage, no tracing. Just debugging, done right.
+- **Full DBGp protocol support** — works with PhpStorm, VS Code, and any DBGp-compatible IDE
+
+### Benchmarks
+
+`bench.php` on Apple Silicon, PHP 8.5.3. No IDE connected — measures pure extension overhead.
+
+| Configuration | Time | Overhead |
+|---|---|---|
+| No debugger | 0.139s | — |
+| Xdebug, no debug trigger | 0.589s¹ | **4.2×** |
+| Xdebug, debug trigger set | 0.589s | **4.2×** |
+| PHP Debugger, no debug trigger | 0.154s | **1.1×** |
+| PHP Debugger, debug trigger set | 0.145s | **1.04×** |
+
+Xdebug enables all hooks at startup regardless of trigger. PHP Debugger activates hooks only when a debug client is actually listening.
+
+¹ Xdebug with `mode=debug` enables `EXT_STMT` unconditionally, so overhead is the same with or without a trigger.
+
+## Installation
+
+### Quick install
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/pronskiy/php-debugger-src/main/install.php | php
+```
+
+Installs the extension for the PHP it's run with — detects version and platform automatically.
+
+### PIE (PHP Installer for Extensions)
+
+```bash
+pie install pronskiy/php-debugger
+```
+
+### Manual download
+
+Grab the right binary from [Releases](https://github.com/pronskiy/php-debugger-src/releases), copy it to your extension directory, and add to `php.ini`:
+
+```ini
+zend_extension=php_debugger.so
+```
+
+## Configuration
+
+PHP Debugger accepts both `php_debugger.*` and `xdebug.*` INI prefixes. Existing Xdebug configurations work as-is.
+
+```ini
+; Both of these work:
+php_debugger.mode = debug
+php_debugger.client_host = 127.0.0.1
+php_debugger.client_port = 9003
+php_debugger.start_with_request = trigger
+
+; Xdebug-compatible (also works):
+xdebug.mode = debug
+xdebug.client_host = 127.0.0.1
+xdebug.client_port = 9003
+xdebug.start_with_request = trigger
+```
+
+## IDE Setup
+
+### PhpStorm
+
+Works as-is. PhpStorm connects via DBGp — the same protocol as Xdebug. Just swap the extension and your existing debug configurations work.
+
+### VS Code
+
+Works as-is with the [PHP Debug](https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug) adapter. No changes needed — it speaks DBGp.
+
+## Xdebug Compatibility
+
+PHP Debugger is a drop-in replacement for Xdebug\'s debug mode:
+
+| Feature | PHP Debugger | Xdebug |
+|---|---|---|
+| `extension_loaded("xdebug")` | ✅ true | ✅ true |
+| `extension_loaded("php_debugger")` | ✅ true | ❌ false |
+| `xdebug.*` INI settings | ✅ works | ✅ works |
+| `xdebug_break()` | ✅ works | ✅ works |
+| `XDEBUG_SESSION` trigger | ✅ works | ✅ works |
+| Step debugging (DBGp) | ✅ | ✅ |
+| Profiling | ❌ removed | ✅ |
+| Code coverage | ❌ removed | ✅ |
+| Tracing | ❌ removed | ✅ |
+
+### New names (optional)
+
+You can also use the new names — they work alongside the Xdebug ones:
+
+- **INI:** `php_debugger.mode`, `php_debugger.client_host`, etc.
+- **Functions:** `php_debugger_break()`, `php_debugger_info()`, `php_debugger_connect_to_client()`, `php_debugger_is_debugger_active()`, `php_debugger_notify()`
+- **Triggers:** `PHP_DEBUGGER_SESSION`, `PHP_DEBUGGER_SESSION_START`, `PHP_DEBUGGER_TRIGGER`
+
+## Requirements
+
+- PHP 8.2, 8.3, 8.4, or 8.5
+
+## License
+
+Released under [The Xdebug License](LICENSE), version 1.03 (based on The PHP License).
+
+This product includes Xdebug software, freely available from [https://xdebug.org/](https://xdebug.org/).
+
+## Acknowledgments
+
+PHP Debugger is built on the foundation of [Xdebug](https://xdebug.org/), created and maintained by **Derick Rethans** since 2002. His two decades of work on PHP debugging tools made this project possible. Thank you, Derick.
diff --git a/README.rst b/README.rst
deleted file mode 100644
index eaf7310..0000000
--- a/README.rst
+++ /dev/null
@@ -1,139 +0,0 @@
-Xdebug
-======
-
-.. image:: https://github.com/xdebug/xdebug/actions/workflows/tests.yml/badge.svg
- :target: https://github.com/xdebug/xdebug/actions/workflows/tests.yml
-.. image:: https://circleci.com/gh/xdebug/xdebug/tree/master.svg?style=svg
- :target: https://circleci.com/gh/xdebug/xdebug
-
-.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg
- :target: https://stand-with-ukraine.pp.ua/
-
-Xdebug is a debugging tool for PHP. It provides step-debugging and a whole
-range of development helpers, such as stack traces, a code profiler, features to
-dump the full execution of your script to a file, and more.
-
-|Repography logo| / Recent activity |Time period|
------
-|recent-activity_timeline| |recent-activity_prs| |recent-activity_words| |recent-activity_users|
-
-.. |Time period| image:: https://images.repography.com/0/xdebug/xdebug/recent-activity/ef1290ac5bfa674f07dcfa4f915ce6b3_badge.svg
- :alt: Time period
- :target: https://repography.com
-.. |Repography logo| image:: https://images.repography.com/logo.svg
- :alt: Repography logo
- :target: https://repography.com
-.. |recent-activity_timeline| image:: https://images.repography.com/0/xdebug/xdebug/recent-activity/ef1290ac5bfa674f07dcfa4f915ce6b3_timeline.svg
- :alt: Timeline graph
- :target: https://github.com/xdebug/xdebug/commits
-.. |recent-activity_prs| image:: https://images.repography.com/0/xdebug/xdebug/recent-activity/ef1290ac5bfa674f07dcfa4f915ce6b3_prs.svg
- :alt: Pull request status graph
- :target: https://github.com/xdebug/xdebug/pulls
-.. |recent-activity_words| image:: https://images.repography.com/0/xdebug/xdebug/recent-activity/ef1290ac5bfa674f07dcfa4f915ce6b3_words.svg
- :alt: Trending topics
- :target: https://github.com/xdebug/xdebug/commits
-.. |recent-activity_users| image:: https://images.repography.com/0/xdebug/xdebug/recent-activity/ef1290ac5bfa674f07dcfa4f915ce6b3_users.svg
- :alt: Top contributors
- :target: https://github.com/xdebug/xdebug/graphs/contributors
-
-Requirements
-------------
-
-Xdebug requires a `supported version `_
-of PHP. For installation it requires the ``pie`` tool, unless your Linux
-distribution has an Xdebug package (most often: ``php-xdebug``).
-
-Installation
-------------
-
-On most Linux distributions you can install Xdebug through `their package
-manager `_.
-
-You can also install Xdebug on Linux, macOS, and Windows, with the
-`PIE `_
-installer through ``pie install xdebug/xdebug``.
-
-For more extensive installation instructions, see the documentation at
-https://xdebug.org/docs/install
-
-Configuration
--------------
-
-Most features in Xdebug have to be opted in into. Each feature has a specific
-opt-in. For example to use the `step debugger
-`_ you need to set `xdebug.remote_enable=1` in
-your configuration file. The step debugger requires an IDE (client), of which
-there are many `available `_.
-
-The documentation has instructions for each of Xdebug's features:
-https://xdebug.org/docs/ and a full list of `settings
-`_ is also available there.
-
-Contributing
-------------
-
-Xdebug is written in C, and extensive knowledge of PHP's internals is
-necessary to be able to contribute. Contributing guidance is available
-`separately `_.
-
-Before you begin to contribute, please reach out first. Either through email
-(address at the bottom), an issue in the `issue tracker
-`_ or preferably through IRC on Freenode's #xdebug
-channel.
-
-Testing
--------
-
-If you are familiar with compiling PHP extension from source, have a local
-checkout of Xdebug's GitHub repository, and have compiled Xdebug in that
-directory following the instructions under `installation
-`_ you can run Xdebug's tests by
-running::
-
- php run-xdebug-tests.php
-
-The test framework requires that the PHP binary on the path has Xdebug loaded,
-with remote debugging enabled through `xdebug.mode=debug`. It is possible
-to skip remote debugging tests by exporting the `SKIP_DBGP_TESTS=1` environment
-variable.
-
-The `SKIP_UNPARALLEL_TESTS=1` can be used to skip tests that can not run in
-parallel environments, and the `SKIP_SLOW_TESTS=1` environment variable to skip
-slow tests. The `OPCACHE` environment variable can either be `yes` or `no` and
-controls whether the test framework enables or disables OpCache.
-
-Licensing
----------
-
-Xdebug is released under `The Xdebug License
-`_, which is based on
-`The PHP License `_. It is
-an Open Source license (though not explicitly endorsed by the Open Source
-Initiative).
-
-Further Reading
----------------
-
-Xdebug has extensive documentation on its `website `_.
-There are over a hundred settings and many functions documented. Please have a
-look through the wealth of information that Xdebug can provide to make your
-every day development with PHP easier.
-
-Support
--------
-
-For questions regarding Xdebug, please use `StackOverflow
-`_, and tag your question
-with `xdebug`.
-
-You can also find ad-hoc and sporadic support on IRC: ``freenode/#xdebug``.
-You can do that with your favourite client, or by using their `webchat
-`_.
-
-If you think that you encountered a bug, please file a detailed bug report
-at https://bugs.xdebug.org. You are required to create an account, this is
-so that you can be contacted for additional information and to keep out
-spam.
-
-
-Derick Rethans — derick@xdebug.org
diff --git a/RELEASE_PROCESS.rst b/RELEASE_PROCESS.rst
deleted file mode 100644
index 6ce96b8..0000000
--- a/RELEASE_PROCESS.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#. Mantis: Create new version if needed, and move "Fixed in version" from -dev
- to release: https://bugs.xdebug.org/manage_proj_edit_page.php?project_id=1
-#. Make sure both the master and release branch (i.e. xdebug_3_3) are fully
- synced and merged.
-#. Update composer.json, package.xml, config.m4, and config.w32 to reflect
- supported range of PHP versions.
-#. For first release in minor version (i.e. 3.5.0alpha1), merge package.xml
- from old bug fix branch into master and new branch and commit::
-
- git diff HEAD..xdebug_3_4 package.xml | patch -p1
-
-#. Run: ``php .build.scripts/make-release.php ``
-#. Move existing release entry down in ``package.xml``
-#. Include new snippet in ``/tmp/package.xml``
-#. Run commands from output
-#. Create a release from the tag on GitHub
-#. Update www.xdebug.org ``views/home/updates.php`` with snippet
-#. Update www.xdebug.org ``src/XdebugVersion.php`` with snippet
-#. Update pre-generated www.xdebug.org ``data/news/...`` file
-#. Mantis: "release" the version, and make sure there is a new one.
-
-Wait until GitHub Actions has created the artefacts.
-
-#. Write Patreon post taking the rendered news article as starting point
-#. Write GitHub release notes taking the rendered news article as starting
- point, and save with "Publish release"
-
-#. In the release branch, update template.rc and php_xdebug.h to the new
- version
-#. Commit template.rc and php_xdebug.h with ``Back to -dev``
-#. Check out master branch, and run: ``git merge --strategy=ours xdebug_3_5``
-#. ``git push origin master xdebug_3_5``
-#. Add files from GHA and source to www.xdebug.org html/files
-#. Create sha256 files for the new releases::
-
- for i in *3.5.*{tgz,dll}; do \
- echo $i; sha256sum $i | sed 's/\ .*//' > $i.sha256.txt; \
- done
-
-#. Add the downloads, DDLs, SHA256 files, and news file to git and commit with
- "Go with 3.5.1"
-#. Upload the source package to PECL
diff --git a/composer.json b/composer.json
index 050ae23..c1c4d42 100644
--- a/composer.json
+++ b/composer.json
@@ -1,13 +1,31 @@
{
- "name": "xdebug/xdebug",
+ "name": "pronskiy/php-debugger",
"type": "php-ext-zend",
"license": "Xdebug-1.03",
- "description": "Xdebug is a debugging and productivity extension for PHP",
+ "description": "A lightweight, high-performance PHP debugger. Drop-in Xdebug replacement focused on debugging.",
+ "homepage": "https://github.com/pronskiy/php-debugger-src",
+ "authors": [
+ {
+ "name": "Roman Pronskiy",
+ "role": "lead"
+ },
+ {
+ "name": "Derick Rethans",
+ "homepage": "https://xdebug.org",
+ "role": "original author (Xdebug)"
+ }
+ ],
"require": {
- "php": ">=8.0,<8.7"
+ "php": ">=8.2,<8.6"
},
"php-ext": {
+ "extension-name": "php_debugger",
"priority": 90,
- "configure-options": []
+ "configure-options": [
+ {
+ "name": "enable-php-debugger",
+ "description": "Enable PHP Debugger support"
+ }
+ ]
}
}
diff --git a/config.m4 b/config.m4
index 9296b21..9474fb3 100644
--- a/config.m4
+++ b/config.m4
@@ -1,16 +1,16 @@
-dnl config.m4 for extension Xdebug
+dnl config.m4 for extension PHP Debugger (based on Xdebug)
-PHP_ARG_ENABLE(xdebug, whether to enable Xdebug support,
-[ --enable-xdebug Enable Xdebug support])
-PHP_ARG_ENABLE(xdebug-dev, whether to enable Xdebug developer build flags,
-[ --enable-xdebug-dev Xdebug: Enable developer flags],, no)
+PHP_ARG_ENABLE(php-debugger, whether to enable PHP Debugger support,
+[ --enable-php-debugger Enable PHP Debugger support])
+PHP_ARG_ENABLE(xdebug-dev, whether to enable PHP Debugger developer build flags,
+[ --enable-xdebug-dev PHP Debugger: Enable developer flags],, no)
m4_include([m4/pkg.m4])
m4_include([m4/clocks.m4])
-if test "$PHP_XDEBUG" != "no"; then
+if test "$PHP_PHP_DEBUGGER" != "no"; then
AC_MSG_CHECKING([for supported PHP version])
PHP_XDEBUG_FOUND_VERSION=`${PHP_CONFIG} --version`
PHP_XDEBUG_FOUND_VERNUM=`${PHP_CONFIG} --vernum`
@@ -47,7 +47,7 @@ if test "$PHP_XDEBUG" != "no"; then
PHP_CHECK_FUNC(res_ninit, resolv)
PHP_CHECK_FUNC(res_nclose, resolv)
- PHP_CHECK_LIBRARY(m, cos, [ PHP_ADD_LIBRARY(m,, XDEBUG_SHARED_LIBADD) ])
+ PHP_CHECK_LIBRARY(m, cos, [ PHP_ADD_LIBRARY(m,, PHP_DEBUGGER_SHARED_LIBADD) ])
@@ -104,12 +104,15 @@ if test "$PHP_XDEBUG" != "no"; then
XDEBUG_DEBUGGER_SOURCES="src/debugger/com.c src/debugger/debugger.c src/debugger/handler_dbgp.c src/debugger/handlers.c src/debugger/ip_info.c"
- PHP_NEW_EXTENSION(xdebug, xdebug.c $XDEBUG_BASE_SOURCES $XDEBUG_LIB_SOURCES $XDEBUG_LIB_MAPS_SOURCES $XDEBUG_DEBUGGER_SOURCES, $ext_shared,,$PHP_XDEBUG_CFLAGS,,yes)
- PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(xdebug)[/src/base])
- PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(xdebug)[/src/lib])
- PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(xdebug)[/src/lib/maps])
- PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(xdebug)[/src/debugger])
- PHP_SUBST(XDEBUG_SHARED_LIBADD)
+ XDEBUG_INSPECT_SOURCES="src/inspect/inspect_transport.c src/inspect/inspect_commands.c"
+
+ PHP_NEW_EXTENSION(php_debugger, xdebug.c $XDEBUG_BASE_SOURCES $XDEBUG_LIB_SOURCES $XDEBUG_LIB_MAPS_SOURCES $XDEBUG_DEBUGGER_SOURCES $XDEBUG_INSPECT_SOURCES, $ext_shared,,$PHP_XDEBUG_CFLAGS,,yes)
+ PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(php_debugger)[/src/base])
+ PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(php_debugger)[/src/lib])
+ PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(php_debugger)[/src/lib/maps])
+ PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(php_debugger)[/src/debugger])
+ PHP_ADD_BUILD_DIR(PHP_EXT_BUILDDIR(php_debugger)[/src/inspect])
+ PHP_SUBST(PHP_DEBUGGER_SHARED_LIBADD)
PHP_ADD_MAKEFILE_FRAGMENT
PHP_ADD_INCLUDE($ext_srcdir/src)
diff --git a/config.w32 b/config.w32
index 58f4200..78b98bb 100644
--- a/config.w32
+++ b/config.w32
@@ -1,8 +1,8 @@
// vim:ft=javascript
-ARG_ENABLE("xdebug", "Xdebug support", "no");
+ARG_ENABLE("php-debugger", "PHP Debugger support", "no");
-if (PHP_XDEBUG == 'yes') {
+if (PHP_PHP_DEBUGGER == 'yes') {
var XDEBUG_BASE_SOURCES="base.c filter.c ctrl_socket.c"
var XDEBUG_LIB_SOURCES="usefulstuff.c cmd_parser.c compat.c crc32.c file.c hash.c headers.c lib.c llist.c log.c normalize_path.c set.c str.c timing.c trim.c var.c var_export_html.c var_export_line.c var_export_text.c var_export_xml.c xdebug_strndup.c xml.c"
var XDEBUG_LIB_MAPS_SOURCES="maps.c maps_private.c parser.c"
@@ -20,17 +20,17 @@ if (PHP_XDEBUG == 'yes') {
}
if (typeof(ZEND_EXTENSION) == 'undefined') {
- EXTENSION('xdebug', files);
+ EXTENSION('debugger', files);
} else {
- ZEND_EXTENSION('xdebug', files);
+ ZEND_EXTENSION('debugger', files);
}
- ADD_FLAG("CFLAGS_XDEBUG", " /I " + configure_module_dirname + " ");
- ADD_FLAG("CFLAGS_XDEBUG", " /I " + configure_module_dirname + "/src ");
- ADD_SOURCES(configure_module_dirname + "/src/base", XDEBUG_BASE_SOURCES, "xdebug");
- ADD_SOURCES(configure_module_dirname + "/src/lib", XDEBUG_LIB_SOURCES, "xdebug");
- ADD_SOURCES(configure_module_dirname + "/src/lib/maps", XDEBUG_LIB_MAPS_SOURCES, "xdebug");
- ADD_SOURCES(configure_module_dirname + "/src/debugger", XDEBUG_DEBUGGER_SOURCES, "xdebug");
+ ADD_FLAG("CFLAGS_DEBUGGER", " /I " + configure_module_dirname + " ");
+ ADD_FLAG("CFLAGS_DEBUGGER", " /I " + configure_module_dirname + "/src ");
+ ADD_SOURCES(configure_module_dirname + "/src/base", XDEBUG_BASE_SOURCES, "debugger");
+ ADD_SOURCES(configure_module_dirname + "/src/lib", XDEBUG_LIB_SOURCES, "debugger");
+ ADD_SOURCES(configure_module_dirname + "/src/lib/maps", XDEBUG_LIB_MAPS_SOURCES, "debugger");
+ ADD_SOURCES(configure_module_dirname + "/src/debugger", XDEBUG_DEBUGGER_SOURCES, "debugger");
- AC_DEFINE("HAVE_XDEBUG_CONTROL_SOCKET_SUPPORT", 1, "Xdebug control socket support");
- AC_DEFINE("HAVE_XDEBUG", 1, "Xdebug support");
+ AC_DEFINE("HAVE_XDEBUG_CONTROL_SOCKET_SUPPORT", 1, "PHP Debugger control socket support");
+ AC_DEFINE("HAVE_XDEBUG", 1, "PHP Debugger support");
}
diff --git a/install.php b/install.php
new file mode 100644
index 0000000..ec53c3e
--- /dev/null
+++ b/install.php
@@ -0,0 +1,102 @@
+=')) {
+ fwrite(STDERR, "Error: PHP {$phpVer} is not supported. Requires PHP 8.2–8.5.\n");
+ exit(1);
+}
+
+if (extension_loaded('php_debugger') || extension_loaded('xdebug')) {
+ echo "\u26a0\ufe0f Extension already loaded. Reinstalling...\n\n";
+}
+
+// Download
+$artifact = "php-debugger-php{$phpVer}-{$os}-{$arch}";
+$url = "https://github.com/{$repo}/releases/latest/download/{$artifact}.so";
+
+echo "Downloading {$url}...\n";
+
+$ctx = stream_context_create(['http' => [
+ 'follow_location' => true,
+ 'header' => "User-Agent: php-debugger-installer\r\n",
+]]);
+
+$binary = @file_get_contents($url, false, $ctx);
+
+if ($binary === false) {
+ fwrite(STDERR, "\nError: could not download binary for PHP {$phpVer} on {$os}-{$arch}\n");
+ fwrite(STDERR, "Check available releases: https://github.com/{$repo}/releases\n");
+ exit(1);
+}
+
+echo sprintf("Downloaded %s (%.1f KB)\n\n", $artifact, strlen($binary) / 1024);
+
+// Install
+$dest = $extDir . DIRECTORY_SEPARATOR . $extFile;
+
+if (@file_put_contents($dest, $binary) === false) {
+ // Try with a temp file and sudo
+ $tmp = tempnam(sys_get_temp_dir(), 'php_debugger_');
+ file_put_contents($tmp, $binary);
+ chmod($tmp, 0755);
+
+ echo "Extension dir not writable, trying sudo...\n";
+ $ret = 0;
+ passthru("sudo cp " . escapeshellarg($tmp) . " " . escapeshellarg($dest), $ret);
+ passthru("sudo chmod 755 " . escapeshellarg($dest));
+ unlink($tmp);
+
+ if ($ret !== 0) {
+ fwrite(STDERR, "Error: could not install to {$dest}\n");
+ exit(1);
+ }
+} else {
+ chmod($dest, 0755);
+}
+
+echo "Installed {$extFile} to {$extDir}/\n\n";
+
+// Check ini
+$iniPath = php_ini_loaded_file();
+$scanDir = php_ini_scanned_files() ? dirname(explode(',', php_ini_scanned_files())[0]) : null;
+
+echo "Add to your php.ini:\n\n";
+echo " zend_extension={$extFile}\n\n";
+
+if ($iniPath) {
+ echo "Loaded ini: {$iniPath}\n";
+}
+if ($scanDir) {
+ echo "Or create: {$scanDir}/99-php_debugger.ini\n";
+}
+
+echo "\nDone! Verify with: php -m | grep -i debugger\n";
diff --git a/package.xml b/package.xml
deleted file mode 100644
index f4fc9c7..0000000
--- a/package.xml
+++ /dev/null
@@ -1,4841 +0,0 @@
-
-
- xdebug
- pecl.php.net
- Xdebug is a debugging and productivity extension for PHP
-
-Xdebug and provides a range of features to improve the PHP development
-experience.
-
-Step Debugging
- A way to step through your code in your IDE or editor while the script is
- executing.
-
-Improvements to PHP's error reporting
- An improved var_dump() function, stack traces for Notices, Warnings, Errors
- and Exceptions to highlight the code path to the error
-
-Tracing
- Writes every function call, with arguments and invocation location to disk.
- Optionally also includes every variable assignment and return value for
- each function.
-
-Profiling
- Allows you, with the help of visualisation tools, to analyse the
- performance of your PHP application and find bottlenecks.
-
-Code Coverage Analysis
- To show which parts of your code base are executed when running unit tests
- with PHP Unit.
-
-
- Derick Rethans
- derick
- derick@xdebug.org
- yes
-
-
- 2025-12-04
-
-
- 3.5.0
- 3.5.0
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Thu, Dec 04, 2025 - Xdebug 3.5.0
-
-+ New features:
-
- - Fixed issue #2338: Add experimental support for Windows Named Pipes control socket
- - Fixed issue #2369: Implement "Native Xdebug Path Mapping" project
- - Fixed issue #2370: PHP 8.5 support
-
-+ Improvements:
-
- - Fixed issue #2213: Expose __EXCEPTION virtual variable for current EG(exception)
- - Fixed issue #2363: Add better debugging support for PHP 8.5's pipes
- - Fixed issue #2345: DBGP's detach does not support base64 encoded strings
-
-= Fixed bugs:
-
- - Fixed issue #2335: Failed dbgp connection is not marked as not active
- - Fixed issue #2336: Optimise xdebug_init_oparray
- - Fixed issue #2337: Modify xdebug_add_stack_frame to always work on the passed execute_data
- - Fixed issue #2367: Debugger should not break on return out of include files when return value debugger is enabled
- - Fixed issue #2372: Build failed on MSVC
- - Fixed issue #2374: Breakpoints in mapped paths don't trigger as they're mapped back before matching
- - Fixed issue #2386: Crashes when running context_get in an exception thrown from an internal function
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8.0.0
- 8.6.99
-
-
- 1.9.1
-
-
-
- xdebug
-
-
-
-
- 2025-11-12
-
-
- 3.5.0alpha3
- 3.5.0alpha3
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Wed, Nov 12, 2025 - Xdebug 3.5.0alpha3
-
-= Fixed bugs:
-
- - Fixed issue #2372: Build failed on MSVC
- - Fixed issue #2374: Breakpoints in mapped paths don't trigger as they're mapped back before matching
-
-
-
-
-
- 2025-10-07
-
-
- 3.5.0alpha2
- 3.5.0alpha2
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Tue, Oct 07, 2025 - Xdebug 3.5.0alpha2
-
-+ New features:
-
- - Fixed issue #2213: Expose __EXCEPTION virtual variable for current EG(exception)
- - Fixed issue #2369: Implement "Native Xdebug Path Mapping" project
- - Fixed issue #2370: PHP 8.5 support
-
-+ Improvements
-
- - Fixed issue #2336: Optimise xdebug_init_oparray
- - Fixed issue #2337: Modify xdebug_add_stack_frame to always work on the passed execute_data
- - Fixed issue #2338: Add experimental support for Windows Named Pipes control socket
- - Fixed issue #2363: Add better debugging support for PHP 8.5's pipes
- - Fixed issue #2367: Debugger should not break on return out of include files when return value debugger is enabled
-
-= Fixed bugs:
-
- - Fixed issue #2335: Failed dbgp connection is not marked as not active
- - Fixed issue #2345: DBGP's detach does not support base64 encoded strings
-
-
-
-
-
- 2025-10-26
-
-
- 3.4.7
- 3.4.7
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Sun, Oct 26, 2025 - Xdebug 3.4.7
-
-= Fixed bugs:
-
- - Fixed issue #2359: PHP 8.4 Lazy Ghost Object inoperable/defunct when Xdebug is enabled
- - Fixed issue #2371: Step debugging initialize lazy objects
- - Fixed issue #2375: Xdebug's exception trace conversion initialises lazy objects
-
-
-
-
-
- 2025-10-06
-
-
- 3.4.6
- 3.4.6
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Mon, Oct 06, 2025 - Xdebug 3.4.6
-
-= Fixed bugs:
-
- - Fixed issue #2328: Stream resource references in stored stack traces don't hold, and can cause crashes
- - Fixed issue #2360: Debugging DateInterval (and other internal objects) causes a crash
-
-
-
-
-
- 2025-07-14
-
-
- 3.4.5
- 3.4.5
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Mon, Jul 14, 2025 - Xdebug 3.4.5
-
-= Fixed bugs:
-
- - Fixed issue #2332: Segmentation fault for code coverage with nested fibers
- - Fixed issue #2356: Reading properties with get hooks may modify property value
-
-
-
-
-
- 2025-06-12
-
-
- 3.4.4
- 3.4.4
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Thu, Jun 12, 2025 - Xdebug 3.4.4
-
-= Fixed bugs:
-
- - Fixed issue #2349: Regression in Xdebug 3.4.3 breaks throwing exceptions in nested generators
- - Fixed issue #2350: Crash when a certain page generates an exception since Xdebug 3.4.3
- - Fixed issue #2352: Crash when using latest Xdebug version when throwing exceptions
- - Fixed issue #2354: The __invoke frame in call stacks don't have the argument name in the trace
-
-
-
-
-
- 2025-05-14
-
-
- 3.4.3
- 3.4.3
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Wed, May 14, 2025 - Xdebug 3.4.3
-
-= Fixed bugs:
-
- - Fixed issue #2322: Xdebug tries to open debugging connection in destructors during shutdown
- - Fixed issue #2325: Referred chrome browser extension is no longer working
- - Fixed issue #2326: Step debugger finishes if property debugging handler in PHP throws an exception
- - Fixed issue #2331: Segmentation fault with 'invalid' variable names
- - Fixed issue #2339: Trying to throw an exception can cause a zend_mm_heap corrupted error under specific circumstances
- - Fixed issue #2340: Xdebug case sensitivity issues on some files introduced since 3.3.0
- - Fixed issue #2343: Fatal error on virtual property hook step debugging
- - Fixed issue #2348: Xdebug does not resolve breakpoints in property hooks
-
-
-
-
-
- 2025-03-09
-
-
- 3.4.2
- 3.4.2
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Sun, Mar 09, 2025 - Xdebug 3.4.2
-
-= Fixed bugs:
-
- - Fixed issue #2313: var_dump does not output some Russian characters
- - Fixed issue #2314: Class properties with hooks are always shown as null
- - Fixed issue #2315: xdebug_dump_superglobals() leaks memory
- - Fixed issue #2317: Code coverage leaks memory
- - Fixed issue #2321: Segfault when null is assigned to a superglobal
- - Fixed issue #2323: xdebug_notify() does not respect xdebug.var_display_max_* Settings
- - Fixed issue #2327: Segmentation Fault 139 if exception thrown in callback since PHP 8.4
-
-
-
-
-
- 2025-01-06
-
-
- 3.4.1
- 3.4.1
-
-
- stable
- stable
-
- Xdebug-1.03
-
- Mon, Jan 06, 2025 - Xdebug 3.4.1
-
- = Fixed bugs:
-
- - Fixed issue #2306: Segmentation fault on each HTTP request when not listening to debugging connections
- - Fixed issue #2307: Segmentation fault due to a superglobal being a reference while checking for triggers
- - Fixed issue #2309: Installation on Windows with PHP PIE failing
- - Fixed issue #2310: xdebug 3.4.0 crashes php8.1-fpm after script execution
-
-
-
-
-
- 2024-11-28
-
-
- 3.4.0
- 3.4.0
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Thu, Nov 28, 2024 - Xdebug 3.4.0
-
-+ New features:
-
- - Fixed issue #2239: Add 'XDEBUG_IGNORE' GET/POST/COOKIE/ENV to make the step debugger ignore that specific request
- - Fixed issue #2281: PHP 8.4 support
-
-+ Improvements
-
- - Fixed issue #2261: Send control socket location in init packet
-
-= Fixed bugs:
-
- - Fixed issue #2262: PHP 8.4: Closure names need different wrapping algorithm
- - Fixed issue #2283: SoapClient usage causes segfault with codecoverage
- - Fixed issue #2294: Nette Tester always crashes in all test jobs when running with XDebug 3.4.0beta1 active
- - Fixed issue #2304: Seg fault on throw exception
- - Fixed issue #2305: Segfault when checking whether to ignore creating a debug connection during shutdown functions
-
-
-
-
-
- 2024-10-04
-
-
- 3.4.0beta1
- 3.4.0beta1
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Fri, Oct 04, 2024 - Xdebug 3.4.0beta1
-
-= Fixed bugs:
-
- - Fixed issue #2261: Send control socket location in init packet
- - Fixed issue #2281: PHP 8.4 support
-
-
-
-
- 2024-05-31
-
-
- 3.4.0alpha1
- 3.4.0alpha1
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Fri, May 31, 2024 - Xdebug 3.4.0alpha1
-
-= Fixed bugs:
-
- - Fixed issue #2239: Add 'XDEBUG_IGNORE' GET/POST/COOKIE/ENV to make the step debugger ignore that specific request
- - Fixed issue #2262: PHP 8.4: Closure names need different wrapping algorithm
-
-
-
-
-
- 2024-04-15
-
-
- 3.3.2
- 3.3.2
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Mon, Apr 15, 2024 - Xdebug 3.3.2
-
-= Fixed bugs:
-
- - Fixed issue #2216: With PHP8.3 and Apache 2.4.58 error_reporting() causing Apache process to hang
- - Fixed issue #2230: Crash when xdebug and blackfire extensions are active
- - Fixed issue #2233: High and continuous Apache server CPU use
-
-
-
-
-
- 2023-12-14
-
-
- 3.3.1
- 3.3.1
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Thu, Dec 14, 2023 - Xdebug 3.3.1
-
-= Fixed bugs:
-
- - Fixed issue #2220: Test failure
- - Fixed issue #2221: Crash when other extensions run PHP code without the stack being initialised yet
- - Fixed issue #2223: Xdebug's constants are not available with `xdebug.mode=off`
- - Fixed issue #2226: xdebug_get_function_stack(['from_exception']) does not always find stored trace
- - Fixed issue #2227: Crash with return value and observers
- - Fixed issue #2228: Return value can not be fetched with property_get if top frame is an internal function
-
-
-
-
- 2023-11-30
-
-
- 3.3.0
- 3.3.0
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Thu, Nov 30, 2023 - Xdebug 3.3.0
-
-+ New features:
-
- - Fixed issue #2171: Support for PHP 8.3
- - Fixed issue #1732: Add support for flame graph outputs
- - Fixed issue #2219: Add control socket on Linux to obtain information and initiate debugger or breakpoint
- - Fixed issue #1562: Add 'local_vars' option to 'xdebug_get_function_stack' to include variables for each st
- - Fixed issue #2194: Add 'params_as_values' option to 'xdebug_get_function_stack' to return data as values
- - Fixed issue #2195: Add 'from_exception' option to 'xdebug_get_function_stack' to return the stack trace where an exception was thrown
-
-+ Improvements:
-
- - Fixed issue #2077: Bring back xdebug.collect_params
- - Fixed issue #2170: Show contents of Spl's ArrayIterator
- - Fixed issue #2172: Show contents of SplDoublyLinkedList and SplPriorityQueue
- - Fixed issue #2183: Bubble up exception message when using code evalution through protocol
- - Fixed issue #2188: Step over with fibers does still step into fiber routines
- - Fixed issue #2197: Add time index and memory to output of xdebug_get_function_stack
- - Fixed issue #2203: Increase default max nesting time out from 256 to 512
- - Fixed issue #2206: Optimise debugger breakpoints checking
- - Fixed issue #2207: Add filenames for include and friends to flamegraph output
- - Fixed issue #2217: xdebug://gateway pseudo host does not support IPv6
-
-= Fixed bugs:
-
- - Fixed issue #450: "Incomplete" backtraces when an exception gets rethrown
- - Fixed issue #476: Exception chaining does not work properly
- - Fixed issue #1155: Local variables are not shown when execution break in error_handler
- - Fixed issue #2000: Debugger evaluate expression: "can't evaluate expression"
- - Fixed issue #2027: Branch/path code coverage for traits drops trait name since 3.1.0
- - Fixed issue #2132: Errors when mountinfo does not have enough information for finding systemd private tmp directory
- - Fixed issue #2200: PECL package file has wrong max PHP version number, and peclweb refuses the package
- - Fixed issue #2208: Superfluous `...` (three omission dots) in var_dump()
- - Fixed issue #2210: Flamegraphs crash when using `start_with_request`
- - Fixed issue #2211: File wrappers get wrong filename location in stack.
- - Fixed issue #2214: Array keys aren't escaped in traces
-
-
-
-
-
- 2023-10-19
-
-
- 3.3.0alpha3
- 3.3.0alpha3
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Thu, Oct 19, 2023 - Xdebug 3.3.0alpha3
-
-= Fixed bugs:
-
- - Fixed issue #1732: Add support for flame graph outputs
- - Fixed issue #2000: Debugger evaluate expression: "can't evaluate expression"
- - Fixed issue #2077: Bring back xdebug.collect_params
- - Fixed issue #2203: Increase default max nesting time out from 256 to 512
- - Fixed issue #2206: Optimise debugger breakpoints checking
-
-
-
-
-
- 2023-09-06
-
-
- 3.3.0alpha2
- 3.3.0alpha2
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Wed, Sep 06, 2023 - Xdebug 3.3.0alpha2
-
-= Fixed bugs:
-
- - Fixed issue #2200: PECL package file has wrong max PHP version number, and peclweb refuses the package
-
-
-
-
- 2023-09-06
-
-
- 3.3.0alpha1
- 3.3.0alpha1
-
-
- beta
- beta
-
- Xdebug-1.03
-
-Wed, Sep 06, 2023 - Xdebug 3.3.0alpha1
-
-+ New features:
-
- - Fixed issue #2171: Support for PHP 8.3
-
-+ Improvements:
-
- - Fixed issue #1562: Add 'local_vars' option to 'xdebug_get_function_stack' to include variables for each st
- - Fixed issue #2170: Show contents of Spl's ArrayIterator while debugging
- - Fixed issue #2172: Show contents of SplDoublyLinkedList and SplPriorityQueue while debugging
- - Fixed issue #2183: Bubble up exception message when using code evalution through protocol
- - Fixed issue #2188: Step over with fibers does still step into fiber routines
- - Fixed issue #2194: Add 'params_as_values' option to 'xdebug_get_function_stack' to return data as values
- - Fixed issue #2195: Add 'from_exception' option to 'xdebug_get_function_stack' to return the stack trace where an exception was thrown
- - Fixed issue #2197: Add time index and memory to output of xdebug_get_function_stack
-
-= Fixed bugs:
-
- - Fixed issue #450: "Incomplete" backtraces when an exception gets rethrown
- - Fixed issue #476: Exception chaining does not work properly
- - Fixed issue #2132: Errors when mountinfo does not have enough information for finding systemd private tmp directory
-
-
-
-
- 2023-07-14
-
-
- 3.2.2
- 3.2.2
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Fri, Jul 14, 2023 - Xdebug 3.2.2
-
-= Fixed bugs:
-
- - Fixed issue #2175: Crash with EXC_BAD_ACCESS in xdebug_str_create
- - Fixed issue #2180: Crash on extended SplFixedArray
- - Fixed issue #2182: Segfault with ArrayObject on stack
- - Fixed issue #2186: Segfault with trampoline functions and debugger activation
-
-
-
-
- 2023-03-21
-
-
- 3.2.1
- 3.2.1
-
-
- stable
- stable
-
- Xdebug-1.03
-
-Tue, Mar 21, 2023 - Xdebug 3.2.1
-
-= Fixed bugs:
-
- - Fixed issue #2144: Xdebug 3.2.0 ignores xdebug.mode and enables all features
- - Fixed issue #2145: Xdebug 3.2.0 crash PHP on Windows if xdebug.mode = off
- - Fixed issue #2146: apache2 segfaulting with version 3.2.0 on PHP 8.0
- - Fixed issue #2148: Icon for link to docs in xdebug_info() HTML output does not always render correctly
-
-
-
-
-
- 2022-12-08
-
-
- 3.2.0
- 3.2.0
-
-
- stable
- stable
-
- BSD style
-
-Thu, Dec 08, 2022 - Xdebug 3.2.0
-
-+ New features:
-
- - Fixed issue #1819: Allow a list of headers in 'xdebug.client_discovery_header'
- - Fixed issue #2079: Add pseudo hosts xdebug://gateway and xdebug://nameserver
- - Fixed issue #2086: Include return value in return breakpoint interruption response
- - Fixed issue #2087: Introduce step for the return state and virtual property for return value
-
-+ Improvements:
-
- - Fixed issue #2062: Xdebug now records whether systemd's PrivateTmp is used in its diagnostics information
- - Fixed issue #2104: Add support for PHP 8.2 "SensitiveParameter" attribute
- - Fixed issue #2117: Removed emulated properties for closures, as PHP 8.2 adds debug information for them
- - Fixed issue #2122: Local variables are now available when using start_upon_error
- - Fixed issue #2123: Add warning in log and diagnositics information when a breakpoint is set on a non-existing file
- - Fixed issue #2138: Step debugger now disconnects and continues running the script, when the debugging client closes the connection
- - Fixed issue #2136: Duplicate line/conditional breakpoints are now rejected
-
-- Deprecations:
-
- - Fixed issue #2014: Drop support for PHP 7.2
- - Fixed issue #2102: Drop support for PHP 7.3
- - Fixed issue #2103: Drop support for PHP 7.4
-
-= Fixed bugs:
-
- - Fixed issue #2002: xdebug_trace_handler_t handler members are not always checked for NULL when executing
- - Fixed issue #2045: Inapproriate frowny face
- - Fixed issue #2089: Alpine Linux does not support res_ninit
- - Fixed issue #2093: Fatal error: linux/rtnetlink.h: No such file or directory linux/rtnetlink.h
- - Fixed issue #2098: With breakpoint_include_return_value enabled step_out break at every function
- - Fixed issue #2105: 3.2.0alpha1 package misses the php-header.h file
- - Fixed issue #2108: Segfault on PHP8.1 with PHPUnit 10 when path coverage is enabled
- - Fixed issue #2113: Crash at step_into after thrown exception with return value debugging en
- - Fixed issue #2121: Xdebug does not use local independent float-to-string functions
- - Fixed issue #2124: Xdebug incorrectly reports that there are no children for static closure properties, even though there are
- - Fixed issue #2125: Crash with PHP 8.2 on 32-bit due to change in "not set" value with CATCH opcode
- - Fixed issue #2126: Problems with retrieving global variables
- - Fixed issue #2127: Tracing does not handle NUL char in anonymous closure scope
- - Fixed issue #2133: Warning with regards to extra NUL character in xdebug_setcookie call
- - Fixed issue #2134: Xdebug stops at the line where the exception is created, not where it is thrown
- - Fixed issue #2135: Xdebug stops twice at the same line after a call breakpoint or xdebug_break()
-
-
-
-
-
- 2022-11-10
-
-
- 3.2.0RC2
- 3.2.0RC2
-
-
- beta
- beta
-
- BSD style
-
-Thu, Nov 10, 2022 - Xdebug 3.2.0RC2
-
-= Fixed bugs:
-
- - Fixed issue #2100: "Fatal error: debuginfo() must return an array" when Exception is thrown from debugInfo in PHP 8.x
- - Fixed issue #2101: When a temporary breakpoint is hit, breakpoint_list should show it as disabled
- - Fixed issue #2126: Problems with retrieving global variables
- - Fixed issue #2127: Tracing does not handle NUL char in anonymous closure scope
- - Fixed issue #2129: Cannot read snapshot Gzip-compressed data is corrupt
- - Fixed issue #2133: Warning with regards to extra NUL character in xdebug_setcookie call
- - Fixed issue #2134: Xdebug stops at the line where the exception is created, not where it is thrown
- - Fixed issue #2135: Xdebug stops twice at the same line after a call breakpoint or xdebug_break()
- - Fixed issue #2136: Duplicate line/conditional breakpoints are not rejected
-
-
-
-
-
- 2022-10-10
-
-
- 3.2.0RC1
- 3.2.0RC1
-
-
- beta
- beta
-
- BSD style
-
- Mon, Oct 10, 2022 - Xdebug 3.2.0RC1
-
- = Fixed bugs:
-
- - Fixed issue #2113: Crash at step_into after thrown exception with return value debugging en
- - Fixed issue #2117: Removed emulated properties for closures, as PHP 8.2 adds debug information for them
- - Fixed issue #2121: Xdebug does not use local independent float-to-string functions
- - Fixed issue #2122: Local variables are not available when using start_upon_error
- - Fixed issue #2123: Add warning in log and diagnositics information when a breakpoint is set on a non-existing file
- - Fixed issue #2124: Xdebug incorrectly reports that there are no children for static closure properties, even thought there are
- - Fixed issue #2125: Crash with PHP 8.2 on 32-bit due to change in "not set" value with CATCH opcode
-
-
-
-
-
- 2022-08-24
-
-
- 3.2.0alpha3
- 3.2.0alpha3
-
-
- beta
- beta
-
- BSD style
-
-Wed, Aug 24, 2022 - Xdebug 3.2.0alpha3
-
-+ Improvements:
-
- - Fixed issue #2112: Force 'return_value' breakpoint information and step to 'on' temporarily
-
-
-
-
- 2022-07-25
-
-
- 3.2.0alpha2
- 3.2.0alpha2
-
-
- beta
- beta
-
- BSD style
-
-Mon, Jul 25, 2022 - Xdebug 3.2.0alpha2
-
-= Fixed bugs:
-
- - Fixed issue #2105: 3.2.0alpha1 package misses the php-header.h file
-
-
-
-
-
- 2022-07-20
-
-
- 3.2.0alpha1
- 3.2.0alpha1
-
-
- beta
- beta
-
- BSD style
-
-Wed, Jul 20, 2022 - Xdebug 3.2.0alpha1
-
-+ New features:
-
- - Fixed issue #1819: Allow a list of headers in 'xdebug.client_discovery_header'
- - Fixed issue #2079: Add pseudo hosts xdebug://gateway and xdebug://nameserver
- - Fixed issue #2087: Introduce step for the return state and virtual property for return value
- - Fixed issue #2104: Add support for PHP 8.2 "SensitiveParameter" attribute
-
-+ Improvements:
-
- - Fixed issue #2086: Include return value in return breakpoint interruption response
-
-- Removed features:
-
- - Fixed issue #2014: Drop support for PHP 7.2
- - Fixed issue #2102: Drop support for PHP 7.3
- - Fixed issue #2103: Drop support for PHP 7.4
-
-= Fixed bugs:
-
- - Fixed issue #2002: xdebug_trace_handler_t handler members are not always checked for NULL when executing
- - Fixed issue #2045: Inapproriate frowny face
- - Fixed issue #2062: Profiler can't able to write cachegrind file at /tmp
- - Fixed issue #2089: Alpine Linux does not support res_ninit
- - Fixed issue #2093: Fatal error: linux/rtnetlink.h: No such file or directory linux/rtnetlink.h
- - Fixed issue #2098: With breakpoint_include_return_value enabled step_out break at every function
-
-
-
-
- 2022-11-08
-
-
- 3.1.6
- 3.1.6
-
-
- stable
- stable
-
- BSD style
-
- Tue, Nov 08, 2022 - Xdebug 3.1.6
-
- = Fixed bugs:
-
- - Fixed issue #2100: "Fatal error: debuginfo() must return an array" when Exception is thrown from debugInfo in PHP 8.x
- - Fixed issue #2101: When a temporary breakpoint is hit, breakpoint_list should show it as disabled
- - Fixed issue #2129: Cannot read snapshot Gzip-compressed data is corrupt
-
-
-
-
-
- 2022-06-06
-
-
- 3.1.5
- 3.1.5
-
-
- stable
- stable
-
- BSD style
-
-Mon, Jun 06, 2022 - Xdebug 3.1.5
-
-= Fixed bugs:
-
- - Fixed issue #2056: Install documentation gives wrong arch for installation on M1 Macs
- - Fixed issue #2082: phpize --clean removes required clocks.m4 file
- - Fixed issue #2083: Constant defined with an enum case produce double "facet" attribute in context_get response
- - Fixed issue #2085: Crash when used with source guardian encoded files
- - Fixed issue #2090: Segfault in __callStatic() after FFI initialization
-
-
-
-
-
- 2022-04-04
-
-
- 3.1.4
- 3.1.4
-
-
- stable
- stable
-
- BSD style
-
-Mon, Apr 04, 2022 - Xdebug 3.1.4
-
-= Fixed bugs:
-
- - Fixed issue #2006: Removing second call breakpoint with same function name
- - Fixed issue #2060: XDebug breaks the Symfony "PhpFilesAdapter" cache adapter
- - Fixed issue #2061: Possible use after free with GC Stats
- - Fixed issue #2063: Can't inspect ArrayObject storage elements
- - Fixed issue #2064: Segmentation fault in symfony cache
- - Fixed issue #2068: Debug session can be started with "XDEBUG_SESSION_START=anything" when xdebug.trigger_value is set
- - Fixed issue #2069: Warn when profiler_append is used together with zlib compression
- - Fixed issue #2075: Code coverage misses static array assignment lines
-
-
-
-
- 2022-02-01
-
-
- 3.1.3
- 3.1.3
-
-
- stable
- stable
-
- BSD style
-
-Tue, Feb 01, 2022 - Xdebug 3.1.3
-
-= Fixed bugs:
-
- - Fixed issue #2049: evaling broken code (still) causes unhandled exception in PHP 7.4
- - Fixed issue #2052: Memory leak when a trace file can't be opened because xdebug.trace_output_name is invalid
- - Fixed issue #2054: Slowdown when calling a function with long string parameters
- - Fixed issue #2055: Debugger creates XML with double facet attribute
-
-
-
-
-
- 2021-12-01
-
-
- 3.1.2
- 3.1.2
-
-
- stable
- stable
-
- BSD style
-
-Wed, Dec 01, 2021 - Xdebug 3.1.2
-
-= Fixed bugs:
-
- - Fixed issue #2036: Segfault on fiber switch in finally block in garbage collected fiber
- - Fixed issue #2037: Crash when profile file can not be created
- - Fixed issue #2041: __debugInfo is not used for var_dump output
- - Fixed issue #2046: Segault on xdebug_get_function_stack inside a Fiber
-
-
-
-
- 2021-10-15
-
-
- 3.1.1
- 3.1.1
-
-
- stable
- stable
-
- BSD style
-
-Fri, Oct 15, 2021 - Xdebug 3.1.1
-
-= Fixed bugs:
-
- - Fixed issue #2016: apache gives no output with xdebug 3.1.0b2 installed
- - Fixed issue #2024: Apache restarts in a loop under PHP 8.1.0 RC3
- - Fixed issue #2029: incorrect and inaccurate date and time displayed in xdebug.log and trace files
- - Fixed issue #2030: PhpStorm step-debug not working on PHP 8.0.11
- - Fixed issue #2032: Use runtime PHP version in DBGp and info pages instead of compiled-against version
- - Fixed issue #2034: Xdebug throws a Segmentation fault when 'set_time_limit' function is disabled
- - Fixed issue #2035: Xdebug block everything with localhost in XAMMP
-
-
-
-
-
- 2021-10-04
-
-
- 3.1.0
- 3.1.0
-
-
- stable
- stable
-
- BSD style
-
-Mon, Oct 04, 2021 - Xdebug 3.1.0
-
-= Fixed bugs:
-
- - Fixed issue #1472: Add assignments to computer readable trace format
- - Fixed issue #1537: Add links to documentation to various different "features" after wizard has run
- - Fixed issue #1738: Add xdebug_notify() function to send data through DBGp to a debugging client
- - Fixed issue #1853: Enable profile compression for cachegrind files
- - Fixed issue #1890: Add connected client and protocol features to diagnostic page
- - Fixed issue #1898: API for querying the currently active mode(s)
- - Fixed issue #1933: Allow for cloud ID to be set through the trigger
- - Fixed issue #1938: Branches in traits aren't marked as executed
- - Fixed issue #1948: Do not redirect warning and error messages to PHP's error log if an Xdebug log is active
- - Fixed issue #1949: private properties for internal classes can't be fetched for debugging
- - Fixed issue #1963: php exit code = -1073741819 when xdebug.mode = off (Windows Thread Safe Only)
- - Fixed issue #1969: Provide breakpoint ID / info in DBGp run command responses
- - Fixed issue #1970: xdebug_get_function_stack with unnamed (internal) parameters have wrong index
- - Fixed issue #1972: Add support for PHP 8.1 Fibers
- - Fixed issue #1974: Add gzip support to trace files
- - Fixed issue #1976: Switch debug session cookie to Lax, and remove expiry time
- - Fixed issue #1978: Xdebug's log messages are cut off at 512 bytes
- - Fixed issue #1980: PHP 8.1: Mark enum classes as "enum"
- - Fixed issue #1986: Add support for multiple trigger values
- - Fixed issue #1989: Profiling does not output correct class when parent keyword is used
- - Fixed issue #1992: Code Coverage with filter produces Segmentation fault on xdebug_stop_code_coverage()
- - Fixed issue #1993: eval-ing broken code causes stepping to break
- - Fixed issue #1996: Add support for Closure visualisation in traces, debugging, and Xdebug's var_dump
- - Fixed issue #1997: Added xdebug_connect_to_client() to attempt a debugging connect while running code
- - Fixed issue #1998: Double facet attribute generated for enums that are stored in properties
- - Fixed issue #1999: Add "readonly" facet to PHP 8.1 readonly properties
- - Fixed issue #2001: Add 'xdebug.use_compression' setting to turn on/off compression for profiling files
- - Fixed issue #2004: Figure out what "XDEBUG_SHOW_FNAME_TODO" define is for
- - Fixed issue #2007: xdebug 3.x fails to build on OS X 10.11 or earlier due to clock_gettime_nsec_np requirement
- - Fixed issue #2008: Using the XDEBUG_SESSION cookie could bypass shared-secret checks
- - Fixed issue #2009: xdebug_stop_code_coverage's argument has type mismatch
- - Fixed issue #2011: Closures as protected properties have double facet XML attribute
- - Fixed issue #2013: Support PHP 8.1
- - Fixed issue #2018: zlib compression support on Windows
- - Fixed issue #2019: Xdebug crash because of uninitialized memory
- - Fixed issue #2020: segfault if xdebug.dump.GET=* and integer key without value in URL
- - Fixed issue #2021: Segmentation fault due to NULL bytes in internal anonymous class names
- - Fixed issue #2025: Anonymous classes which extend are not detected as anonymous classes since PHP 8.0
-
-
-
-
- 2021-09-07
-
-
- 3.1.0beta2
- 3.1.0beta2
-
-
- beta
- beta
-
- BSD style
-
-Tue, Sep 07, 2021 - Xdebug 3.1.0beta2
-
-= Fixed bugs:
- - This is a packaging fix only release. The package missed a file that were needed
- for building on PHP 7.2 and 8.1.
-
-
-
-
- 2021-09-05
-
-
- 3.1.0beta1
- 3.1.0beta1
-
-
- beta
- beta
-
- BSD style
-
-Sun, Sep 05, 2021 - Xdebug 3.1.0beta1
-
-+ New features:
-
- - Fixed issue #1738: Add xdebug_notify() function to send data through DBGp to a debugging client
- - Fixed issue #1853: Enable profile compression for cachegrind files
- - Fixed issue #1898: API for querying the currently active mode(s)
- - Fixed issue #1972: Add support for PHP 8.1 Fibers
- - Fixed issue #1974: Add gzip support to trace files
- - Fixed issue #1997: Added xdebug_connect_to_client() to attempt a debugging connect while running code
- - Fixed issue #2001: Add 'xdebug.use_compression' setting to turn on/off compression for profiling files
- - Fixed issue #2013: Support PHP 8.1
-
-+ Improvements:
-
- - Fixed issue #1472: Add assignments to computer readable trace format
- - Fixed issue #1890: Add connected client and protocol features to diagnostic page
- - Fixed issue #1933: Allow for cloud ID to be set through the trigger
- - Fixed issue #1969: Provide breakpoint ID / info in DBGp run command responses
- - Fixed issue #1976: Switch debug session cookie to Lax, and remove expiry time
- - Fixed issue #1980: PHP 8.1: Mark enum classes as "enum"
- - Fixed issue #1986: Add support for multiple trigger values
- - Fixed issue #1996: Add support for Closure visualisation in traces, debugging, and Xdebug's var_dump
- - Fixed issue #1999: Add "readonly" facet to PHP 8.1 readonly properties
-
-= Fixed bugs:
-
- - Fixed issue #1938: Branches in traits aren't marked as executed
- - Fixed issue #1948: Do not redirect warning and error messages to PHP's error log if an Xdebug log is active
- - Fixed issue #1949: private properties for internal classes can't be fetched for debugging
- - Fixed issue #1963: php exit code = -1073741819 when xdebug.mode = off (Windows Thread Safe Only)
- - Fixed issue #1970: xdebug_get_function_stack with unnamed (internal) parameters have wrong index
- - Fixed issue #1978: Xdebug's log messages are cut off at 512 bytes
- - Fixed issue #1989: Profiling does not output correct class when parent keyword is used
- - Fixed issue #1992: Code Coverage with filter produces Segmentation fault on xdebug_stop_code_coverage()
- - Fixed issue #1993: eval-ing broken code causes stepping to break
- - Fixed issue #1998: Double facet attribute generated for enums that are stored in properties
- - Fixed issue #2004: Figure out what "XDEBUG_SHOW_FNAME_TODO" define is for
- - Fixed issue #2008: Using the XDEBUG_SESSION cookie could bypass shared-secret checks
- - Fixed issue #2009: xdebug_stop_code_coverage's argument has type mismatch
- - Fixed issue #2011: Closures as protected properties have double facet XML attribute
-
-+ Documentation
-
- - Fixed issue #1537: Add links to documentation to various different "features" after wizard has run
-
-
-
-
- 2021-04-08
-
-
- 3.0.4
- 3.0.4
-
-
- stable
- stable
-
- BSD style
-
-Thu, Apr 08, 2021 - Xdebug 3.0.4
-
-= Fixed bugs:
-
- - Fixed issue #1802: Improve xdebug.org home page
- - Fixed issue #1944: tracing is started without trigger, when profiler is also enabled
- - Fixed issue #1947: xdebug_info() settings section does not show the modes that are overridden by XDEBUG_MODE
- - Fixed issue #1950: Assignment trace with ASSIGN_OBJ_REF crashes
- - Fixed issue #1954: Calling xdebug_start_trace without mode including tracing results in a fatal error
-
-
-
-
- 2021-02-22
-
-
- 3.0.3
- 3.0.3
-
-
- stable
- stable
-
- BSD style
-
-Mon, Feb 22, 2021 - Xdebug 3.0.3
-
-= Fixed bugs:
-
- - Fixed issue #1930: No local variables with trigger and xdebug_break()
- - Fixed issue #1931: xdebug_info() output misses configuration settings if phpinfo() has been called
- - Fixed issue #1932: One line in multi-line string concatenation is not covered
- - Fixed issue #1940: Wrong type used for showing GC Stats reports
-
-
-
-
- 2021-01-04
-
-
- 3.0.2
- 3.0.2
-
-
- stable
- stable
-
- BSD style
-
-Mon, Jan 04, 2021 - Xdebug 3.0.2
-
-= Fixed bugs:
-
- - Fixed issue #1907: Empty exception message when setting the $message property to a stringable object
- - Fixed issue #1910: Code coverage misses constructor property promotion code
- - Fixed issue #1914: Compillation failure on OpenBSD
- - Fixed issue #1915: Debugger should only start with XDEBUG_SESSION and not XDEBUG_PROFILE
- - Fixed issue #1918: Warn if PHP's Garbage Collection is disabled in gc_stats mode
- - Fixed issue #1919: Crash when enabling filter without the right mode active
- - Fixed issue #1921: Xdebug does not start step debugging if start_with_request=trigger
- - Fixed issue #1922: Code coverage misses array assignment lines
- - Fixed issue #1924: Deprecated INI settings displayed in phpinfo()
- - Fixed issue #1925: xdebug.start_with_request and start_upon_error display inconsistent values
- - Fixed issue #1926: Add Xdebug mode's source to xdebug_info() output
- - Fixed issue #1927: Crash when calling xdebug_stop_trace without a trace in progress
- - Fixed issue #1928: xdebug_stop_gcstats() can also return false
-
-
-
-
-
- 2020-12-04
-
-
- 3.0.1
- 3.0.1
-
-
- stable
- stable
-
- BSD style
-
-Fri, Dec 4, 2020 - xdebug 3.0.1
-
-= Fixed bugs:
-
- - Fixed issue #1893: Crash with ext-fiber and xdebug.mode=coverage
- - Fixed issue #1896: Segfault with closures that are not created from user code
- - Fixed issue #1897: Crash when removing a breakpoint
- - Fixed issue #1900: Update README and add run-xdebug-tests.php to package
- - Fixed issue #1901: Stack traces are shown (with a broken time) when Xdebug's mode includes 'debug' but not 'develop' or 'trace'
- - Fixed issue #1902: Compillation failure on AIX
- - Fixed issue #1903: Constants should always be available, regardless of which mode Xdebug is in
- - Fixed issue #1904: Profile and trace files using %t or %u do not get the right names
- - Fixed issue #1905: Debugger does not disable request timeouts
-
-
-
-
- 2020-11-25
-
-
- 3.0.0
- 3.0.0
-
-
- stable
- stable
-
- BSD style
-
-Wed, Nov 25, 2020 - xdebug 3.0.0
-
-Xdebug 3 includes major changes in functionality compared to Xdebug 2. The
-primary way how you turn on functionality is through the new xdebug.mode PHP
-configuration setting. This made it possible to massively increase performance
-in many of Xdebug's sub systems as Xdebug is now much more conservative in
-which hooks are enabled.
-
-Configuration changes, massive performance improvements, and PHP 8 support are
-the primary features in Xdebug 3, but there is much more. The upgrade guide
-lists the changes in great detail, please read it:
-
-https://xdebug.org/docs/upgrade_guide
-
--------------
-
-+ New features:
-
- - Implemented issue #1762: Introduce feature modes
- - Implemented issue #1793: Add xdebug.start_upon_error setting to cover the removed xdebug.remote_mode=jit feature.
- - Implemented issue #1797: Implement generic logging
- - Implemented issue #1801: Rename mode 'display' to mode 'develop'
- - Implemented issue #1831: Add diagnostics function xdebug_info()
- - Implemented issue #1833: Add links to documentation in diagnostic log
- - Implemented issue #1837: Support for associative variadic variable names (PHP 8)
- - Implemented issue #1841: Add support for PHP 8 'match' keyword
-
-+ Improvements:
-
- - Implemented issue #1680: Update var dumping routines to include relevant information for interned strings and immutable arrays
- - Implemented issue #1712: Add unit to profiler data types
- - Implemented issue #1743: Figuring out whether a call is a closure uses string comparisions instead of checking the ACC flag (Benjamin Eberlei)
- - Implemented issue #1752: Use a stack pool to manage stack entries instead of allocating and deallocating entries
- - Implemented issue #1755: Overload pcntl_fork() to prevent performance degradation by calling xdebug_get_pid often (Carlos Granados)
- - Implemented issue #1781: Include 'Xdebug' in max nesting level error message
- - Implemented issue #1783: Stacktrace needs vertical scrolling on small screens (Tobias Tom)
- - Implemented issue #1789: Provide PHP stubs for Xdebug's functions
- - Implemented issue #1807: Document Xdebug installation with yum and apt
- - Implemented issue #1813: Make sure that the xdebug_init_*_globals don't do more than they need to, and that init is only done when xdebug.mode != off
- - Implemented issue #1817: Switch filename storage from char*/size_t to zend_string*
- - Implemented issue #1818: Switch variable storage from char*/size_t to zend_string*
- - Implemented issue #1820: Increase time tracing precision (Michael Vorisek)
- - Implemented issue #1824: Allow Xdebug's mode to be set through an environment variable
- - Implemented issue #1825: Improve profiler performance by not calling fflush after every function (Michael Vorisek)
- - Implemented issue #1826: Reduce profiler memory allocation and call overhead
- - Implemented issue #1829: Switch to 10ns profiler resolution (Michael Vorisek)
- - Implemented issue #1832: If connect back host can not be contacted, fallback to remote_host/port
- - Implemented issue #1858: Only open/close log if there is an actual message to log
- - Implemented issue #1860: Allow xdebug.cloud_id to be set through an environment variable
- - Implemented issue #1814: Don't obtain the current time when it's not needed
- - Implemented issue #1835: Add current trace and profile file name, to diagnostic page
- - Implemented issue #1885: Change xdebug.start_with_ settings to PHP_INI_SYSTEM|PHP_INI_PERDIR
- - Implemented issue #1889: max_nesting_level should only trigger in "develop" mode
-
-- Removed features:
-
- - Implemented issue #1795: Deprecate PHP 7.1 support
-
- - Implemented issue #1786: Remove idekey value fallback to USER/USERNAME environment variable
- - Implemented issue #1809: Remove "overload_var_dump" setting
- - Implemented issue #1810: Remove collect_vars and xdebug_get_declared_vars()
- - Implemented issue #1812: Remove show_mem_delta setting
- - Implemented issue #1838: Remove collect_params setting, and always default it to "4"
- - Implemented issue #1847: Remove xdebug.remote_cookie_expire_time setting
- - Implemented issue #1016: Removed support for pause-execution (introduced in beta1)
- - Implemented issue #1868: Remove xdebug_disable and xdebug_enabled
- - Implemented issue #1883: Function xdebug_is_enabled has been removed
-
-= Changes:
-
- - Implemented issue #1378: Unfortunate coupling of default_enable=1 and remote_mode=jit
- - Implemented issue #1773: Replace all xdebug.*_output_dir settings with xdebug.output_dir
- - Implemented issue #1785: Replace xdebug.remote_mode and xdebug.auto_trace with generic "start-with-request" setting
- - Implemented issue #1791: Replace xdebug.*trigger*, xdebug.*trigger_value*, with xdebug.start_with_request=trigger and xdebug.trigger_value
- - Implemented issue #1792: Change start_with_request=always/never to start_with_request=yes/no
- - Implemented issue #1794: Replace the filter's blacklist/whitelist with exclude/include
- - Implemented issue #1811: Remove xdebug.collect_includes setting and always include them
- - Implemented issue #1843: Adjust XDEBUG_CONFIG checks, and document what can be set through it
- - Implemented issue #1844: Add deprecation warning for removed and renamed configuration setting names
- - Implemented issue #1845: Rename xdebug.remote_{host,port} to xdebug.client_{host,port}
- - Implemented issue #1846: Rename setting xdebug.remote_timeout to xdebug.connect_timeout_ms
- - Implemented issue #1848: Change default Xdebug port from 9000 to 9003
- - Implemented issue #1850: Change array variable output in tracing to use modern [] syntax
- - Implemented issue #1856: Rename xdebug.remote_connect_back to xdebug.discover_client_host
- - Implemented issue #1857: Rename xdebug.remote_addr_header to xdebug.client_discovery_header
-
-= Fixed bugs:
-
- - Fixed issue #1608: XDEBUG_CONFIG env var make sessions automatically START ever (at least send the XDEBUG_SESSION cookie)
- - Fixed issue #1726: Memory leaks spotted in various places in typical error code paths
- - Fixed issue #1757: Pause-execution feature degrades performance
- - Fixed issue #1864: Incompatibility with PCS and protobuf extensions
- - Fixed issue #1870: XDEBUG_SESSION_START URL parameter does not override XDEBUG_SESSION cookie
- - Fixed issue #1871: The "idekey" is not set when debugging is started through XDEBUG_SESSION cookie
- - Fixed issue #1873: xdebug_info() segfaults if the diagnostic buffer is empty
- - Fixed issue #1874: Incompatibility with protobuf extension
- - Fixed issue #1875: Overflow with large amounts of elements for variadics
- - Fixed issue #1878: Compilation failure: Socket options TCP_KEEPCNT and TCP_KEEPINTVL do not exist on Solaris 10 Sparc
- - Fixed issue #1880: Bundled unit test tests/debugger/bug00886.phar misses to load phar extension
- - Fixed issue #1887: Crash bug with xdebug_call_class and xdebug_call_file
- - Fixed issue #1756: Php process won't exit after running connected to a client
- - Fixed issue #1823: Profiler generates negative data for memory usage
- - Fixed issue #1834: Return type must be bool in overloaded set_time_limit
- - Fixed issue #1888: Make headers sticky in xdebug_info() output
-
-+ Documentation
-
- - Fixed issue #1865: Document XDEBUG_TRIGGER environment variable
- - Fixed issue #1866: Document comma separated xdebug.mode values
- - Fixed issue #1884: Document where Xdebug's settings can be set
- - Fixed issue #1892: Document changed/removed ini settings in the upgrade guide with the links provided
-
-
-
-
- 2020-11-16
-
-
- 3.0.0RC1
- 3.0.0RC1
-
-
- beta
- beta
-
- BSD style
-
-Mon, Nov 16, 2020 - xdebug 3.0.0RC1
-
-This is a BETA release, and not ready for production environments.
-
-Xdebug 3 has many changes. Please read the upgrade guide at
-https://3.xdebug.org/docs/upgrade_guide
-
-Xdebug 3 documentation is available at https://3.xdebug.org/docs
-
--------------
-
-+ Improvements:
-
- - Implemented issue #1814: Don't obtain the current time when it's not needed
- - Implemented issue #1885: Change xdebug.start_with_ settings to PHP_INI_SYSTEM|PHP_INI_PERDIR
-
-- Removed features:
-
- - Implemented issue #1016: Removed support for pause-execution (introduced in beta1)
- - Implemented issue #1868: Remove xdebug_disable and xdebug_enabled
- - Implemented issue #1883: Function xdebug_is_enabled has been removed
-
-= Fixed bugs:
-
- - Fixed issue #1608: XDEBUG_CONFIG env var make sessions automatically START ever (at least send the XDEBUG_SESSION cookie)
- - Fixed issue #1757: Pause-execution feature degrades performance
- - Fixed issue #1864: Incompatibility with PCS and protobuf extensions
- - Fixed issue #1870: XDEBUG_SESSION_START URL parameter does not override XDEBUG_SESSION cookie
- - Fixed issue #1871: The "idekey" is not set when debugging is started through XDEBUG_SESSION cookie
- - Fixed issue #1873: xdebug_info() segfaults if the diagnostic buffer is empty
- - Fixed issue #1874: Incompatibility with protobuf extension
- - Fixed issue #1875: Overflow with large amounts of elements for variadics
- - Fixed issue #1878: Compilation failure: Socket options TCP_KEEPCNT and TCP_KEEPINTVL do not exist on Solaris 10 Sparc
- - Fixed issue #1880: Bundled unit test tests/debugger/bug00886.phar misses to load phar extension
- - Fixed issue #1887: Crash bug with xdebug_call_class and xdebug_call_file
-
-+ Documentation
-
- - Fixed issue #1865: Document XDEBUG_TRIGGER environment variable
- - Fixed issue #1866: Document comma separated xdebug.mode values
- - Fixed issue #1884: Document where Xdebug's settings can be set
-
-
-
-
- 2020-10-14
-
-
- 3.0.0beta1
- 3.0.0beta1
-
-
- beta
- beta
-
- BSD style
-
-Wed, Oct 14, 2020 - xdebug 3.0.0beta1
-
-This is a BETA release, and not ready for production environments.
-
-Xdebug 3 has many changes. Please read the upgrade guide at
-https://3.xdebug.org/docs/upgrade_guide
-
-Xdebug 3 documentation is available at https://3.xdebug.org/docs
-
--------------
-
-+ New features:
-
- - Implemented issue #1762: Introduce feature modes
- - Implemented issue #1793: Add xdebug.start_upon_error setting to cover the removed xdebug.remote_mode=jit feature.
- - Implemented issue #1797: Implement generic logging
- - Implemented issue #1801: Rename mode 'display' to mode 'develop'
- - Implemented issue #1831: Add diagnostics function xdebug_info()
- - Implemented issue #1833: Add links to documentation in diagnostic log
- - Implemented issue #1837: Support for associative variadic variable names (PHP 8)
- - Implemented issue #1841: Add support for PHP 8 'match' keyword
-
-- Removed features:
-
- - Implemented issue #1795: Deprecate PHP 7.1 support
-
- - Implemented issue #1786: Remove idekey value fallback to USER/USERNAME environment variable
- - Implemented issue #1809: Remove "overload_var_dump" setting
- - Implemented issue #1810: Remove collect_vars and xdebug_get_declared_vars()
- - Implemented issue #1812: Remove show_mem_delta setting
- - Implemented issue #1838: Remove collect_params setting, and always default it to "4"
- - Implemented issue #1847: Remove xdebug.remote_cookie_expire_time setting
-
-= Changes:
-
- - Implemented issue #1378: Unfortunate coupling of default_enable=1 and remote_mode=jit
- - Implemented issue #1773: Replace all xdebug.*_output_dir settings with xdebug.output_dir
- - Implemented issue #1785: Replace xdebug.remote_mode and xdebug.auto_trace with generic "start-with-request" setting
- - Implemented issue #1791: Replace xdebug.*trigger*, xdebug.*trigger_value*, with xdebug.start_with_request=trigger and xdebug.trigger_value
- - Implemented issue #1792: Change start_with_request=always/never to start_with_request=yes/no
- - Implemented issue #1794: Replace the filter's blacklist/whitelist with exclude/include
- - Implemented issue #1811: Remove xdebug.collect_includes setting and always include them
- - Implemented issue #1844: Add deprecation warning for removed and renamed configuration setting names
- - Implemented issue #1845: Rename xdebug.remote_{host,port} to xdebug.client_{host,port}
- - Implemented issue #1846: Rename setting xdebug.remote_timeout to xdebug.connect_timeout_ms
- - Implemented issue #1848: Change default Xdebug port from 9000 to 9003
- - Implemented issue #1850: Change array variable output in tracing to use modern [] syntax
- - Implemented issue #1856: Rename xdebug.remote_connect_back to xdebug.discover_client_host
- - Implemented issue #1857: Rename xdebug.remote_addr_header to xdebug.client_discovery_header
-
-+ Improvements:
-
- - Implemented issue #1680: Update var dumping routines to include relevant information for interned strings and immutable arrays
- - Implemented issue #1712: Add unit to profiler data types
- - Implemented issue #1743: Figuring out whether a call is a closure uses string comparisions instead of checking the ACC flag (Benjamin Eberlei)
- - Implemented issue #1752: Use a stack pool to manage stack entries instead of allocating and deallocating entries
- - Implemented issue #1755: Overload pcntl_fork() to prevent performance degradation by calling xdebug_get_pid often (Carlos Granados)
- - Implemented issue #1781: Include 'Xdebug' in max nesting level error message
- - Implemented issue #1783: Stacktrace needs vertical scrolling on small screens (Tobias Tom)
- - Implemented issue #1789: Provide PHP stubs for Xdebug's functions
- - Implemented issue #1807: Document Xdebug installation with yum and apt
- - Implemented issue #1813: Make sure that the xdebug_init_*_globals don't do more than they need to, and that init is only done when xdebug.mode != off
- - Implemented issue #1817: Switch filename storage from char*/size_t to zend_string*
- - Implemented issue #1818: Switch variable storage from char*/size_t to zend_string*
- - Implemented issue #1820: Increase time tracing precision (Michael Vorisek)
- - Implemented issue #1824: Allow Xdebug's mode to be set through an environment variable
- - Implemented issue #1825: Improve profiler performance by not calling fflush after every function (Michael Vorisek)
- - Implemented issue #1826: Reduce profiler memory allocation and call overhead
- - Implemented issue #1829: Switch to 10ns profiler resolution (Michael Vorisek)
- - Implemented issue #1832: If connect back host can not be contacted, fallback to remote_host/port
- - Implemented issue #1858: Only open/close log if there is an actual message to log
- - Implemented issue #1860: Allow xdebug.cloud_id to be set through an environment variable
-
-= Fixed bugs:
-
- - Fixed issue #1756: Php process won't exit after running connected to a client
- - Fixed issue #1823: Profiler generates negative data for memory usage
- - Fixed issue #1834: Return type must be bool in overloaded set_time_limit
-
-
-
-
- 2020-09-28
-
-
- 2.9.8
- 2.9.8
-
-
- stable
- stable
-
- BSD style
-
-Mon, Sep 28, 2020 - xdebug 2.9.8
-
-= Fixed bugs:
-
- - Fixed issue #1851: Paths are not counted as coveraged with loops calling function
- - Fixed issue #1855: Build issues on FreeBSD
-
-
-
-
- 2020-09-16
-
-
- 2.9.7
- 2.9.7
-
-
- stable
- stable
-
- BSD style
-
-Wed, Sep 16, 2020 - xdebug 2.9.7
-
-= Fixed bugs:
-
- - Fixed issue #1839: Add keepalive options to debugging socket
-
-
-
-
- 2020-05-29
-
-
- 2.9.6
- 2.9.6
-
-
- stable
- stable
-
- BSD style
-
-Fri, May 29, 2020 - xdebug 2.9.6
-
-= Fixed bugs:
-
- - Fixed issue #1782: Cookie "XDEBUG_SESSION" will be soon rejected because it has the "sameSite" attribute set to none
- - Fixed issue #1787: Branch coverage data does not always follow the lines/functions format
- - Fixed issue #1790: Segfault in var_dump() or while debugging with protobuf extension
-
-
-
-
- 2020-04-25
-
-
- 2.9.5
- 2.9.5
-
-
- stable
- stable
-
- BSD style
-
-Sat, Apr 25, 2020 - xdebug 2.9.5
-
-= Fixed bugs:
-
- - Fixed issue #1772: Crash with exception thrown inside a destructor
- - Fixed issue #1775: Segfault when another extension compiles a PHP file during RINIT
- - Fixed issue #1779: Nested multi-line built-in function in namespace are not covered
-
-
-
-
- 2020-03-23
-
-
- 2.9.4
- 2.9.4
-
-
- stable
- stable
-
- BSD style
-
-Mon, Mar 23, 2020 - xdebug 2.9.4
-
-= Fixed bugs:
-
- - Fixed issue #1763: Crash while setting opcode overrides in ZTS mode.
- - Fixed issue #1766: Using the DBGp detach command disables remote debugging for the whole process.
-
-
-
-
- 2020-03-13
-
-
- 2.9.3
- 2.9.3
-
-
- stable
- stable
-
- BSD style
-
-Fri, Mar 13, 2020 - xdebug 2.9.3
-
-= Fixed bugs:
-
- - Fixed issue #1753: Resolved breakpoints use information from wrong files
- - Fixed issue #1758: Xdebug changes error_get_last results inside a try catch
- - Fixed issue #1759: User registered opcode handlers should call ones already set by other extensions
-
-
-
-
- 2020-01-31
-
-
- 2.9.2
- 2.9.2
-
-
- stable
- stable
-
- BSD style
-
-Fri, Jan 31, 2020 - xdebug 2.9.2
-
-= Fixed bugs:
-
- - Fixed issue #1735: DBGp eval warning promoted to Exception can cause out-of-sync responses
- - Fixed issue #1736: Segmentation fault when other extensions run PHP in RINIT
- - Fixed issue #1739: Tracing footer not written
-
-
-
-
- 2020-01-16
-
-
- 2.9.1
- 2.9.1
-
-
- stable
- stable
-
- BSD style
-
-Thu, Jan 16, 2020 - xdebug 2.9.1
-
-= Fixed bugs:
-
- - Fixed issue #1721: Header may not contain NUL bytes in Unknown on line 0
- - Fixed issue #1727: Debugger stops more often than expected due to resolving breakpoints
- - Fixed issue #1728: INIT_STATIC_METHOD_CALL is not overloaded
- - Fixed issue #1731: var_dump with DateTime does not output properties (Ryan Mauger)
- - Fixed issue #1733: SEND_VAR_NO_REF_EX opcode, used for require(), is not overloaded
- - Fixed issue #1734: Segfault with DBGp "source" with a out-of-range start line number
-
-
-
-
- 2019-12-09
-
-
- 2.9.0
- 2.9.0
-
-
- stable
- stable
-
- BSD style
-
-Mon, Dec 9, 2019 - xdebug 2.9.0
-
-+ Improvements:
-
- - Fixed issue #1723: Class/function pre-analysis for code coverage speed improvements
-
-- Removed features:
-
- - Fixed issue #1301: Removed aggregated profiler feature
- - Fixed issue #1720: Remove superfluous xdebug.remote_handler setting
-
-= Fixed bugs:
-
- - Fixed issue #1722: Build warning issues on FreeBSD
- - Fixed issue #1724: Missing property types and uninitialised values in variable dumping routines
-
-
-
-
- 2019-12-02
-
-
- 2.8.1
- 2.8.1
-
-
- stable
- stable
-
- BSD style
-
-Mon, Dec 2, 2019 - xdebug 2.8.1
-
-= Fixed bugs:
-
- - Fixed issue #1717: Code coverage turned slow after update from 2.7.2 to 2.8.0
-
-
-
-
- 2019-10-31
-
-
- 2.8.0
- 2.8.0
-
-
- stable
- stable
-
- BSD style
-
-Thu, Oct 31, 2019 - xdebug 2.8.0
-
-= Fixed bugs:
-
- - Fixed issue #1665: Segfault with garbage collection and complex function arguments
- - Fixed issue #1699: Crash during debugging Phalcon project
- - Fixed issue #1705: Crash while debugging with ionCube being used
- - Fixed issue #1708: Crash on evaluating object with properties
- - Fixed issue #1709: Wrong data type breaks tests on Big Endian build
- - Fixed issue #1713: INIT_FCALL is not overloaded in code coverage
-
-
-
-
- 2019-08-26
-
-
- 2.8.0beta2
- 2.8.0beta2
-
-
- beta
- beta
-
- BSD style
-
-Mon, Aug 26, 2019 - xdebug 2.8.0beta2
-
-= Fixed bugs:
-
- - Fixed issue #1540: Code coverage should not run when turned off in php.ini
- - Fixed issue #1573: Using an exception_handler creates an extra broken profiler file
- - Fixed issue #1589: function names used in auto_prepend_file missing from profile file
- - Fixed issue #1613: Wrong name displayed for Recoverable fatal error
- - Fixed issue #1652: Problems with detach in debugger init stage
- - Fixed issue #1676: Xdebug doesn't write trace footer for shutdown functions
- - Fixed issue #1689: Traces show return values and exit information for functions without entry information
- - Fixed issue #1691: Code Coverage misses fluent interface function call
- - Fixed issue #1698: Switch PHP 7.4 Windows builds back to VS17
- - Fixed issue #1700: Xdebug abuses possibilty immutable class flags
-
-
-
-
- 2019-07-25
-
-
- 2.8.0beta1
- 2.8.0beta1
-
-
- beta
- beta
-
- BSD style
-
-Thu, Jul 25, 2019 - xdebug 2.8.0beta1
-
-= Fixed bugs:
-
- - Fixed issue #1679: Code Coverage misses static property as function
- argument
- - Fixed issue #1682: Invalid NULL byte in debugger XML with anonymous classes
- - Fixed issue #1683: Xdebug does not compile due to changes to ASSIGN_ADD and
- friends operations in PHP 7.4alpha3
- - Fixed issue #1687: Use appropriate process ID for logging and "right
- process" tracking
- - Fixed issue #1688: Improve performance by using getpid() only when step
- debugger is active
-
-
-
-
- 2019-06-28
-
-
- 2.8.0alpha1
- 2.8.0alpha1
-
-
- beta
- beta
-
- BSD style
-
-Fri, May 28, 2019 - xdebug 2.8.0alpha1
-
-+ Added features:
-
- - Implemented issue #1599: Add support for PHP 7.4
-
-+ Improvements:
-
- - Implemented issue #1388: Support 'resolved' flag for breakpoints
- - Implemented issue #1664: Run breakpoint resolver when after a new breakpoint is added as well
-
-= Fixed bugs:
-
- - Fixed issue #1660: Return breakpoints for methods don't break immediately
-
-- Removed features:
-
- - Fixed issue #1666: Remove xdebug.extended_info setting
-
-
-
-
- 2019-05-06
-
-
- 2.7.2
- 2.7.2
-
-
- stable
- stable
-
- BSD style
-
-Mon, May 6, 2019 - xdebug 2.7.2
-
-= Fixed bugs:
-
- - Fixed issue #1488: Rewrite DBGp 'property_set' to always use eval
- - Fixed issue #1586: error_reporting()'s return value is incorrect during debugger's 'eval' command
- - Fixed issue #1615: Turn off Zend OPcache when remote debugger is turned on
- - Fixed issue #1656: remote_connect_back alters header if multiple values are present
- - Fixed issue #1662: __debugInfo should not be used for user-defined classes
-
-
-
-
- 2019-04-05
-
-
- 2.7.1
- 2.7.1
-
-
- stable
- stable
-
- BSD style
-
-Wed, Apr 5, 2019 - xdebug 2.7.1
-
-= Fixed bugs:
-
- - Fixed issue #1646: Missing newline in error message
- - Fixed issue #1647: Memory corruption when a conditional breakpoint is used
- - Fixed issue #1641: Perfomance degradation with getpid syscall (Kees Hoekzema)
-
-
-
-
- 2019-03-06
-
-
- 2.7.0
- 2.7.0
-
-
- stable
- stable
-
- BSD style
-
-Wed, Mar 6, 2019 - xdebug 2.7.0
-
-= Fixed bugs:
-
- - Fixed issue #1520: Xdebug does not handle variables and properties with "-" in their name
- - Fixed issue #1577: Code coverage path analysis with chained catch fails in PHP 7.3
- - Fixed issue #1639: Compile warning/error on GCC 8 or Clang due to "break intentionally missing"
- - Fixed issue #1642: Debugger gives: "Warning: Header may not contain NUL bytes"
-
-
-
-
- 2019-02-15
-
-
- 2.7.0RC2
- 2.7.0RC2
-
-
- beta
- beta
-
- BSD style
-
-Fri, Feb 15, 2019 - xdebug 2.7.0RC2
-
-= Fixed bugs:
-
- - Fixed issue #1551: Property with value null is not represented well
- - Fixed issue #1621: Xdebug fails to compile cleanly on 32-bit platforms
- - Fixed issue #1625: Work around ABI conflicts in PHP 7.3.0/PHP 7.3.1
- - Fixed issue #1628: The PHP function name being constructed to record when GC Collection runs, is not freed
- - Fixed issue #1629: SOAP Client/Server detection code does not handle inherited classes
-
-
-
-
- 2019-02-01
-
-
- 2.7.0RC1
- 2.7.0RC1
-
-
- beta
- beta
-
- BSD style
-
-Fri, Feb 1, 2019 - xdebug 2.7.0RC1
-
-= Fixed bugs:
-
- - Fixed issue #1571: File/line information is not shown for closures in namespaces.
- - Fixed issue #1578: Compile error due to redefinition of "zif_handler" with old GCCs.
- - Fixed issue #1583: Xdebug crashes when OPcache's compact literals optimisation is on.
- - Fixed issue #1598: Make path/branch coverage work with OPcache loaded for PHP 7.3 and later.
- - Fixed issue #1620: Division by zero when GC Stats Collection runs with memory manager disabled.
-
-
-
-
- 2018-09-20
-
-
- 2.7.0beta1
- 2.7.0beta1
-
-
- beta
- beta
-
- BSD style
-
-Thu, Sep 20, 2018 - xdebug 2.7.0beta1
-
-+ Improvements:
-
- - Fixed issue #1519: PHP 7.3 support
-
-
-
-
- 2018-04-01
-
-
- 2.7.0alpha1
- 2.7.0alpha1
-
-
- beta
- beta
-
- BSD style
-
-Sun, Apr 1, 2018 - xdebug 2.7.0alpha1
-
-= Improvements:
-
- - Fixed issue #938: Support remote debugging for PHP scripts that fork. (Sponsored by Brad Wilson)
- - Fixed issue #1487: Re-enable IPv6 test on Travis.
-
-= Fixed bugs:
-
- - Fixed issue #1526: Namespace filter does equality match instead of prefix match.
- - Fixed issue #1532: SIGABRT when using remote debugging and an error is thrown in eval().
- - Fixed issue #1543: Various memory leaks due to changes in (internal) string handling.
-
-
-
-
- 2018-08-01
-
-
- 2.6.1
- 2.6.1
-
-
- stable
- stable
-
- BSD style
-
-Wed, Aug 1, 2018 - xdebug 2.6.1
-
-= Fixed bugs:
-
- - Fixed issue #1525: Namespace filter does equality match instead of prefix match
- - Fixed issue #1532: SIGABRT when using remote debugging and an error is thrown in eval() (Philip Hofstetter)
- - Fixed issue #1543: Various memory leaks due to changes in (internal) string handling
- - Fixed issue #1556: Crash when register_shutdown_function() is called with a function named call_user_func*
- - Fixed issue #1557: Remove 'return' in void xdebug_build_fname
- - Fixed issue #1568: Can't debug object properties that have numeric keys
-
-+ Improvements:
-
- - Fixed issue #1487: Re-enable IPv6 test on Travis
-
-
-
-
- 2018-01-29
-
-
- 2.6.0
- 2.6.0
-
-
- stable
- stable
-
- BSD style
-
-Mon, Jan 29, 2018 - xdebug 2.6.0
-
-= Fixed bugs:
-
- - Fixed issue #1522: Remote debugging test failures on s390 (Big Endian).
-
-
-
-
- 2018-01-23
-
-
- 2.6.0RC2
- 2.6.0RC2
-
-
- beta
- beta
-
- BSD style
-
-Tue, Jan 23, 2018 - xdebug 2.6.0RC2
-
-= Fixed bugs:
-
- - Fixed issue #1521: xdebug_gc_stats.* missing from 2.6.0RC1 tarball
-
-
-
-
- 2018-01-22
-
-
- 2.6.0RC1
- 2.6.0RC1
-
-
- beta
- beta
-
- BSD style
-
-Mon, Jan 22, 2018 - xdebug 2.6.0RC1
-
-+ Added features:
-
- - Fixed issue #1506: Add garbage collection statistics feature (Benjamin Eberlei).
- - Fixed issue #1507: Add functions to access Zend Engine garbage collection metrics (Benjamin Eberlei).
-
-+ Improvements:
-
- - Fixed issue #1510: Change switch/case "break intentionally missing" comments to use GCC 7's new "fallthrough" attribute.
- - Fixed issue #1511: Detect and use compiler flags through new configure option.
-
-= Fixed bugs:
-
- - Fixed issue #1335: Debugging with PhpStorm sometimes gives "can not get property".
- - Fixed issue #1454: Invalid memory read or segfaults from a __call() method.
- - Fixed issue #1508: Code coverage filter not checked in xdebug_common_assign_dim handler.
- - Fixed issue #1509: Code coverage missing for case inside switch with PHP 7.2.
- - Fixed issue #1512: Xdebug does not properly encode and escape properties with quotes and \0 characters.
- - Fixed issue #1514: Variable names with a NULL char are cut off at NULL char.
- - Fixed issue #1515: Object property names with a NULL char are cut off at NULL char.
- - Fixed issue #1516: Can't fetch variables or object properties which have \0 characters in them.
- - Fixed issue #1517: Notifications incorrectly specify the error type in "type_string" instead of "type".
-
-
-
-
- 2017-12-28
-
-
- 2.6.0beta1
- 2.6.0beta1
-
-
- beta
- beta
-
- BSD style
-
-Thu, Dec 28, 2017 - xdebug 2.6.0beta1
-
-+ Added features:
-
- - Fixed issue #1059: Add filter capabilities to tracing, stack traces, and code coverage.
- - Fixed issue #1437: Add X-Profile-File-Name header when a profile file has been generated.
-
-+ Improvements:
-
- - Fixed issue #1493: Run test suite in AppVeyor for Windows CI.
- - Fixed issue #1498: Use new ZEND_EXTENSION API in config.w32 build scripts. (Kalle)
-
-= Fixed bugs:
-
- - Fixed issue #702: Check whether variables tracing also works with =&.
- - Fixed issue #1501: Xdebug var dump tries casting properties.
- - Fixed issue #1502: SEND_REF lines are not marked as covered.
-
-
-
-
-
- 2017-12-02
-
-
- 2.6.0alpha1
- 2.6.0alpha1
-
-
- beta
- beta
-
- BSD style
-
-Sat, Dec 2, 2017 - xdebug 2.6.0alpha1
-
-+ Added features:
-
- - Implemented issue #474: Added "memory" output to profiling files, to find out where memory is allocated.
- - Implemented issue #575: Dump super globals contents to error log upon errors, just like when this would happen for stack traces.
- - Implemented issue #964: Parse X-Forwarded-For for the first IP address when selecting the remote_connect_back host (Steve Easley).
- - Implemented issue #990: Add DBGp: notifications for notices and warnings to be shown in IDEs.
- - Implemented issue #1312: Implement extended_properties feature to remote debugging to support names and values with low ASCII values.
- - Implemented issue #1323: Added xdebug.filename_format setting to configure the formatting of filenames when tracing.
- - Implemented issue #1379: Added support for Unix domain sockets to xdebug.remote_host (Sara Golemon).
- - Implemented issue #1380: Added xdebug_is_debugger_active() that returns true when debugger is connected.
- - Implemented issue #1391: Added support for earlier stack frames through new argument for xdebug_call_* functions.
- - Implemented issue #1420: Handle PHP 7.2's new methods for switch/case
- - Implemented issue #1470: Added xdebug.remote_timeout to make connect timeout configurable.
- - Implemented issue #1495: Make var_dump() also use the new xdebug.filename_format when formatting filenames.
-
-+ Improvements:
-
- - Implemented issue #847: Added support for "%s" specifier for xdebug.trace_output_name.
- - Implemented issue #1384: Compile warning on Ubuntu 16.04 with GCC 5.4.x.
- - Implemented issue #1401: Improved error message in case the connection breaks.
- - Implemented issue #1430: Change DBGp tests to use TEST_PHP_EXECUTABLE instead of hard coded 'php'
- - Implemented issue #1484: Use FD_CLOEXEC with debugging sockets to prevent FDs from leaking to forked processes (Chris Wright).
- - Improve the foldexpr in xt.vim to fold lines correctly (Donie Leigh).
-
-= Fixed bugs:
-
- - Fixed issue #1272: property_get doesn't return @attributes for SimpleXMLElement.
- - Fixed issue #1305: Property names with quotes can not be fetch while debugging.
- - Fixed issue #1431: Fix "use after free" with in add_name_attribute_or_element.
- - Fixed issue #1432: Fixed memory leak with xdebug_path_info_dtor.
- - Fixed issue #1449: Debugging breaks with array element keys containing low-ASCII variables.
- - Fixed issue #1471: Tracing crashes with return_assignments and ternairy operator.
- - Fixed issue #1474: Crashes due to variable resolving/reading mechanism not taking care of temporary hash tables correctly (Nikita Popov, Derick).
- - Fixed issue #1481: Fixed s390x and ppc64 builds (Remi Collet).
- - Fixed issue #1486: Crash on ZEND_SWITCH_LONG / ZEND_SWITCH_STRING with more than 32 cases.
- - Fixed issue #1496: Rewrite README.rst to be more clear on how to install and build Xdebug.
-
-~ Changes:
-
- - Fixed issue #1411: Use Error (Throwable) instead of fatal error when maximum nesting level is reached.
-
-- Removed features:
-
- - Implemented issue #1377: Drop support for PHP 5.5 and 5.6, only PHP 7 is now supported
-
-
-
-
-
- 2017-06-21
-
-
- 2.5.5
- 2.5.5
-
-
- stable
- stable
-
- BSD style
-
-= Fixed bugs:
-
- - Fixed issue #1439: TYPE_CHECK needs overloading due to smart branches
- - Fixed issue #1444: Code Coverage misses a variable in a multi-line function
- call
- - Fixed issue #1446: Code Coverage misses elseif if it uses an isset with a
- property
-
-
-
-
- 2017-05-15
-
-
- 2.5.4
- 2.5.4
-
-
- stable
- stable
-
- BSD style
-
-Mon, May 15, 2017 - xdebug 2.5.4
-
-= Fixed bugs:
-
- - Fixed issue #799: Function traces report base class instead of object name
- - Fixed issue #1421: Fix set_time_limit hanging on PHP 5.6 when pcntl_exec
- does not exist (Frode E. Moe)
- - Fixed issue #1429: Code coverage does not cover null coalesce
- - Fixed issue #1434: Code coverage segfaults on 32-bit arch
-
-
-
-
- 2017-04-18
-
-
- 2.5.3
- 2.5.3
-
-
- stable
- stable
-
- BSD style
-
-Mon, Apr 18, 2017 - xdebug 2.5.3
-
-= Fixed bugs:
-
- - Fixed issue #1421: Xdebug crashes when it is loaded without pcntl being
- present
-
-
-
-
- 2017-04-17
-
-
- 2.5.2
- 2.5.2
-
-
- stable
- stable
-
- BSD style
-
-Mon, Apr 17, 2017 - xdebug 2.5.2
-
-= Fixed bugs:
-
- - Fixed issue #701: Functions as array indexes show ??? in trace
- - Fixed issue #1403: Code coverage does not cover BIND_STATIC
- - Fixed issue #1404: Execution time is calculated incorrectly
- - Fixed issue #1413: Code coverage mishap with PHP 7.1.3
- - Fixed issue #1414: Missing variable assignment in traces with OPcache
- loaded
- - Fixed issue #1415: Crash with multiple catch constructs with OPcache loaded
- - Fixed issue #1416: Trace files should not include the first result of a
- generator if it hasn't started yet
- - Fixed issue #1417: Fetching properties of static class contexts fails due
- to incorrect fetch mode
- - Fixed issue #1419: Summary not written when script ended with
- "pcntl_exec()"
-
-
-
-
- 2017-04-17
-
-
- 2.5.2
- 2.5.2
-
-
- stable
- stable
-
- BSD style
-
-Sun, Feb 26, 2017 - xdebug 2.5.1
-
-= Fixed bugs:
-
- - Fixed issue #1057: Add xdebug.ini of all settings to package
- - Fixed issue #1165: DBGp: step_out skips subsequent function calls
- - Fixed issue #1180: Code coverage crashes with non-standard start/stops
- - Fixed issue #1278: Xdebug with PHP 7 does not handle prefill-from-oparray
- for XDEBUG_CC_UNUSED
- - Fixed issue #1300: Xdebug functions are not exposing their signature to
- Reflection
- - Fixed issue #1313: Arguments to __call() trampoline picked from the wrong
- memory location
- - Fixed issue #1329: While printing out a stack with and function parameters,
- XDebug reads uninitialized zvals or free()d memory
- - Fixed issue #1381: Code Coverage misses line due to missing FETCH_DIM_W
- overload
- - Fixed issue #1385: can not fetch IS_INDIRECT properties
- - Fixed issue #1386: Executable code not shown as executed/executable
- - Fixed issue #1392: Unable to compile on FreeBSD due to missing struct
- definition
- - Fixed issue #1394: Code coverage does not cover instanceof (in elseif)
-
-
-
-
- 2016-12-04
-
-
- 2.5.0
- 2.5.0
-
-
- stable
- stable
-
- BSD style
-
-Sun, Dec 4, 2016 - xdebug 2.5.0
-
-+ Added features:
-
- - Implemented issue #1232: add memory delta to HTML traces
- - Implemented issue #1365: Allow remote_connect_back to be set through
- XDEBUG_CONFIG
-
-= Fixed bugs:
-
- - Fixed issue #1168: Added defensive check to prevent infinite loop
- - Fixed issue #1242: Xdebug on Windows with Eclipse has issues with
- breakpoint IDs
- - Fixed issue #1343: Wrong values of numerical keys outside 32bit range
- - Fixed issue #1357: Function signature using variadics is reported as being
- not executed
- - Fixed issue #1361: Remote debugging connection issues with Windows (Anatol
- Belski)
- - Fixed issue #1373: Crash in zend_hash_apply_with_arguments when debugging,
- due to unset symbol table
-
-
-
-
- 2016-11-12
-
-
- 2.5.0RC1
- 2.5.0RC1
-
-
- stable
- stable
-
- BSD style
-
-Sat, Nov 12, 2016 - xdebug 2.5.0RC1
-
-+ Added features:
-
- - Implemented issue #998: Added support for IPv6 (Thomas Vanhaniemi)
- - Implemented issue #1297: Initial PHP 7.1 support
-
-= Fixed bugs:
-
- - Fixed issue #1295: Apache crashes (SIGSEGV) when trying to establish
- connection when sockfd is large
- - Fixed issue #1303: POLLRDHUP is not supported outside of Gnu/Linux
- - Fixed issue #1331: Segfault in code coverage
-
-- Removed features:
-
- - Support for PHP versions lower than PHP 5.5 has been dropped
-
-
-
-
- 2016-08-02
-
-
- 2.4.1
- 2.4.1
-
-
- stable
- stable
-
- BSD style
-
-Tue, Aug 02, 2016 - xdebug 2.4.1
-
-= Fixed bugs:
-
- - Fixed issue #1106: A thrown Exception after a class with __debugInfo gives
- 2 errors
- - Fixed issue #1241: FAST_CALL/FAST_RET take #2
- - Fixed issue #1246: Path and branch coverage should be initialised per
- request, not globally
- - Fixed issue #1263: Code coverage segmentation fault with opcache enabled
- - Fixed issue #1277: Crash when using a userland function from RSHUTDOWN with
- profiling enabled
- - Fixed issue #1282: var_dump() of integers > 32 bit is broken on Windows
- - Fixed issue #1288: Segfault when uncaught exception message does not
- contain " in "
- - Fixed issue #1291: Debugclient installation fails on Mac OS X
- - Fixed issue #1326: Tracing and generators crashes with PHP 7.x
- - Fixed issue #1333: Profiler accesses memory structures after freeing
-
-
-
-
- 2016-01-25
-
-
- 2.4.0RC4
- 2.4.0RC4
-
-
- beta
- beta
-
- BSD style
-
-Mon, Jan 25, 2016 - xdebug 2.4.0RC4
-
-= Fixed bugs:
-
- - Fixed issue #1220: Segmentation fault if var_dump() output is too large.
- - Fixed issue #1223: Xdebug crashes on PHP 7 when doing a DBGp eval command.
- - Fixed issue #1229: Issues with GCC 4.8, which in -O2 move removes some
- required code.
- - Fixed issue #1235: Xdebug does not compile against PHP 7.1-dev due to
- ZEND_FETCH_STATIC_PROP*.
- - Fixed issue #1236: Can't remove breakpoints with negative IDs.
- - Fixed issue #1238: Xdebug crashes with SIGSEGV while enumerating references
- in variables.
- - Fixed issue #1239: Crash due to changes with the CATCH opcode's jump
- mechanism in 7.1
- - Fixed issue #1241: Xdebug doesn't handle FAST_RET and FAST_CALL opcodes for
- branch/dead code analysis, and path coverage.
- - Fixed issue #1245: xdebug_dump_superglobals dumps *uninitialized* with PHP
- 7.
- - Fixed issue #1250: Add PHP version descriptors to debugging log and profile
- files.
-
-
-
-
- 2016-03-03
-
-
- 2.4.0
- 2.4.0
-
-
- stable
- stable
-
- BSD style
-
-Thu, Mar 03, 2016 - xdebug 2.4.0
-
-= Fixed bugs:
-
- - Fixed issue #1258: Case in PHP 7.0 and code coverage
- - Fixed issue #1261: segmentation fault in xdebug.so with PHP 7.0 version of
- 'pkgtools' due to spl_autoload()
- - Fixed issue #1262: overload_var_dump=0 messes with xdebug_var_dump()
- - Fixed issue #1266: xdebug_dump_superglobals() always dumps empty stack on
- PHP 7
- - Fixed issue #1267: AIX build issues
- - Fixed issue #1270: String parsing marked not covered with PHP 7
-
-
-
-
- 2015-12-12
-
-
- 2.4.0RC3
- 2.4.0RC3
-
-
- beta
- beta
-
- BSD style
-
-Wed, Dec 12, 2015 - xdebug 2.4.0RC3
-
-= Fixed bugs:
-
- - Fixed issue #1221: Sort out Windows x64 PHP 7 support
- - Fixed issue #1229: Detect GCC 4.8 and disable optimisations when it is found
-
-= Others:
-
- - Made the test suite work for Windows too. Finally, after 13 years.
-
-
-
-
- 2015-12-02
-
-
- 2.4.0RC2
- 2.4.0RC2
-
-
- beta
- beta
-
- BSD style
-
-Wed, Dec 02, 2015 - xdebug 2.4.0RC2
-
-= Fixed bugs:
-
- - Fixed issue #1181: Remote debugging does not handle exceptions after using
- zend_read_property
- - Fixed issue #1189: Remove address attribute from remote debugging responses
- - Fixed issue #1194: The error message is doubly HTML-encoded with assert()
- - Fixed issue #1210: Segfault with code coverage dead code analysis and
- foreach on PHP 7
- - Fixed issue #1215: SIGSEGV if xdebug.trace_output_dir directory does not
- exist
- - Fixed issue #1217: xdebug.show_error_trace should not be enabled by default
- - Fixed issue #1218: Xdebug messes with the exception code, by casting it to
- int
- - Fixed issue #1219: Set default value for xdebug.overload_var_dump to 2 to
- include file / line numbers by default
- - Use long for PHP 5, and zend_long for PHP 7 for ini settings in the globals
-
-
-
-
- 2015-11-21
-
-
- 2.4.0RC1
- 2.4.0RC1
-
-
- beta
- beta
-
- BSD style
-
-Sat, Nov 21, 2015 - xdebug 2.4.0RC1
-
-= Fixed bugs:
-
- - Fixed issue #1195: Segfault with code coverage and foreach
- - Fixed issue #1200: Additional opcodes need to be overloaded for PHP 7
- - Fixed issue #1202: Anonymous classes are not handled properly while remote debugging
- - Fixed issue #1203: Accessing static property of a class that has no static properties crashes while remote debugging
- - Fixed issue #1209: Segfault with building a function name for create_function
- - Restored Windows support (Includes patches by Jan Ehrhardt)
-
-
-
-
- 2015-11-05
-
-
- 2.4.0beta1
- 2.4.0beta1
-
-
- beta
- beta
-
- BSD style
-
-Thu, Sep 05, 2015 - xdebug 2.4.0beta1
-
-+ Added features:
-
- - Implemented issue #1109: Added support for PHP 7.
- - Implemented issue #1153: Add function monitor functionality.
- - Implemented issue #1183: Add xdebug.show_error_trace setting to
- allow/disallow to show a stack trace for every Error (throwable)
-
-= Fixed bugs:
-
- - Fixed issue #1070: Too many open files error with php-fpm: connections not
- closed. (Patch by Sean Dubois)
- - Fixed issue #1123: With Xdebug 2.3.1, PHPUnit with coverage is
- exponentially slower than without
- - Fixed issue #1166: Using $this in __debugInfo() causes infinite recursion
- - Fixed issue #1173: Segmentation fault in xdebug_get_monitored_functions()
- - Fixed issue #1182: Using PHPStorm with PHP 7 RC1 and xdebug 2.4-dev break
- points are passed by including setting break point at start of script
- - Fixed issue #1192: Dead code analysis does not work for generators with
- 'return;'
-
-
-
-
- 2015-06-19
-
-
- 2.3.3
- 2.3.3
-
-
- stable
- stable
-
- BSD style
-
-Fri, Jun 19, 2015 - xdebug 2.3.3
-
-= Fixed bugs:
-
- - Fixed issue #1130: Escaping issues with docrefs and HTML characters in
- error messages
- - Fixed issue #1133: PDO exception code value type is changed
- - Fixed issue #1137: Windows does not support %zu formatting for sprintf
- - Fixed issue #1140: Tracing with __debugInfo() crashes Xdebug due to a stack
- overflow
- - Fixed issue #1148: Can't disable max_nesting_function
- - Fixed issue #1151: Crash when another extension calls call_user_function()
- during RINIT
-
- - Fixed crash with code coverage (Antony Dovgal)
- - Fixed usage of virtual_file_ex and STR_FREE (Remi Collet)
- - Reset overloaded opcodes at the end of each request (Eran Ifrah)
-
-= Improvements:
-
- - Fixed issue #686: Not possible to inspect SplObjectStorage instances with
- Xdebug
- - Fixed issue #864: No attributes are shown if an object extends
- ArrayIterator
- - Fixed issue #996: Can't evaluate property of class that extends ArrayObject
- - Fixed issue #1134: Allow introspection of ArrayObject implementation's
- internal storage
- - Get rid of setlocale hack, by using %F instead of %f (and speed up tracing
- by 15-20%)
-
-
-
-
- 2015-03-22
-
-
- 2.3.2
- 2.3.2
-
-
- stable
- stable
-
- BSD style
-
-Sun, Mar 22, 2015 - xdebug 2.3.2
-
-= Fixed bugs:
-
- - Fixed issue #1117: Path/branch coverage sometimes crashes
- - Fixed issue #1121: Segfaults with path/branch coverage
-
-
-
-
- 2015-02-24
-
-
- 2.3.1
- 2.3.1
-
-
- stable
- stable
-
- BSD style
-
-Tue, Feb 24, 2015 - xdebug 2.3.1
-
-= Fixed bugs:
-
- - Fixed issue #1112: Setting an invalid xdebug.trace_format causes Xdebug to
- crash
- - Fixed issue #1113: xdebug.*_trigger do no longer work, due to NULL not
- being an empty string
-
-
-
-
- 2015-02-22
-
-
- 2.3.0
- 2.3.0
-
-
- stable
- stable
-
- BSD style
-
-Sun, Feb 22, 2015 - xdebug 2.3.0
-
-= Fixed bugs:
-
- - Fixed bug #932: Added an error message in case the remote debug log
- couldn't be opened
- - Fixed bug #982: Incorrect file paths in exception stack trace
- - Fixed bug #1094: Segmentation fault when attempting to use branch/path
- coverage
- - Fixed bug #1101: Debugger is not triggered on xdebug_break() in JIT mode
- - Fixed bug #1102: Stop Xdebug from crashing when debugging PHP Code with
- "php -r".
- - Fixed bug #1103: XDEBUG_SESSION_STOP_NO_EXEC only stops first script
- executed with auto_prepend|append_files
- - Fixed bug #1104: One character non-public properties cause issues with
- debugging
- - Fixed bug #1105: Setting properties without specifying a type only works in
- topmost frame (Dominik del Bondio)
- - Fixed bug #1095: Crash when using a non-associate array key in GLOBALS
- - Fixed bug #1111: eval does not work when debugger is stopped in
- xdebug_throw_exception_hook (Dominik del Bondio)
-
-+ Added features:
-
- - General
-
- - Implemented issue #304: File name and line number info for overloaded
- var_dump()
- - Implemented issue #310: Allow class vars and array keys with
- xdebug_debug_zval()
- - Implemented issue #722: Add stack trace limit setting.
- - Implemented issue #1003: Add option to xdebug_print_function_stack() to
- suppress filename and line number
- - Implemented issue #1004: Ability to halt on warning/notice
- - Implemented issue #1023: Add support for PHP 5.6 variadics
- - Implemented issue #1024: Add support for PHP 5.6's ASSIGN_POW
-
- - Debugging
-
- - Implemented issue #406: Added support for remote debugging user-defined
- constants
- - Implemented issue #495: Added support for the wildcard exception name '*'
- - Implemented issue #1066: Better error message for SELinux preventing
- debugging connections
- - Implemented issue #1084: Added support for extended classes to trigger
- exception breakpoints
- - Implemented issue #1084: Added exception code as extra element to
- debugger XML
-
- - Tracing
-
- - Implemented issue #341: Added the time index and memory usage for
- function returns in normal tracefiles
- - Implemented issue #644: Shared secret for profiler_enable_trigger and
- trace_enable_trigger with *_value option
- - Implemented issue #971: Added the trace file option
- "XDEBUG_TRACE_NAKED_FILENAME" to xdebug_start_trace() to prevent the
- ".xt" extension from being added
- - Implemented issue #1021: Added support for return values to computerized
- trace files
- - Implemented issue #1022: Added support for serialized variables as format
- in trace files in the form of option "5" for "xdebug.collect_params"
-
- - Code coverage
-
- - Implemented issue #380: Added xdebug_code_coverage_started()
- - Implemented issue #1034: Add collected path and branch information to
- xdebug_get_code_coverage() output
-
- - Profiling
-
- - Implement issue #1054: Support for filename and function name compression
- in cachegrind files
-
-+ Changes:
-
- - Implemented issue #863: Support xdebug.overload_var_dump through
- ini_set()
- - Implemented issue #973: Use case-insensitive filename comparison on all
- systems (Galen Wright-Watson)
- - Implemented issue #1015: Added the xdebug.force_display_errors and
- xdebug.force_error_reporting php.ini-only settings to always override
- PHP's settings for display_errors and error_reporting
- - Implemented issue #1057: Removed trailing whitespace from example
- xdebug.ini
- - Implemented issue #1096: Improve performance improvement for handling
- breakpoints by ignoring locales (Daniel Sloof)
- - Implemented issue #1100: Raise default max_nesting_level to 256
-
-- Removed features:
-
- - Support for PHP versions lower than PHP 5.4 have been dropped.
-
-
-
-
- 2015-01-21
-
-
- 2.2.7
- 2.2.7
-
-
- stable
- stable
-
- BSD style
-
-Thu, Jan 22, 2014 - xdebug 2.2.7
-
-= Fixed bugs:
-
- - Fixed bug #1083: Segfault when requesting a variable for a context that did
- not have them.
- - Fixed bug #1087: zend_execute_script or zend_eval_string in RINIT segfaults.
- - Fixed bug #1088: Xdebug won't show dead and not executed lines at the second
- time.
- - Fixed bug #1098: Xdebug doesn't make use of __debugInfo.
- - Fixed segfaults with ZTS on PHP 5.6.
-
-
-
-
- 2014-11-14
-
-
- 2.2.6
- 2.2.6
-
-
- stable
- stable
-
- BSD style
-
-Fri, Nov 14, 2014 - xdebug 2.2.6
-
-= Fixed bugs:
-
- - Fixed bug #1048: Can not get $GLOBAL variable by property_value on function
- context.
- - Fixed bug #1073 and #1075: Segmentation fault with internal functions
- calling internal functions.
- - Fixed bug #1085: Fixed the tracefile analyser as the format version had been
- bumbed.
- - Fixed memory leaks
-
-
-
-
- 2014-04-29
-
-
- 2.2.5
- 2.2.5
-
-
- stable
- stable
-
- BSD style
-
-Tue, Apr 29, 2014 - xdebug 2.2.5
-
-= Fixed bugs:
-
- - Fixed bug #1040: Fixed uninitialized sa value.
- - Fixed building on hurd-i386.
-
-
-
-
- 2014-02-28
-
-
- 2.2.4
- 2.2.4
-
-
- stable
- stable
-
- BSD style
-
-Fri, Feb 28, 2014 - xdebug 2.2.4
-
-= Fixed bugs:
-
- - Fixed bug #785: Profiler does not handle closures and call_user_func_array well.
- - Fixed bug #963: Xdebug waits too long for response from remote client
- - Fixed bug #976: XDebug crashes if current varibles scope contains COM object.
- - Fixed bug #978: Inspection of array with negative keys fails
- - Fixed bug #979: property_value -m 0 should mean all bytes, not 0 bytes
- - Fixed bug #987: Hidden property names not shown.
-
-
-
-
- 2013-05-22
-
-
- 2.2.3
- 2.2.3
-
-
- stable
- stable
-
- BSD style
-
-Tue, May 21, 2013 - xdebug 2.2.3
-
-+ Added features:
-
- - Support for PHP 5.5.
-
-= Fixed bugs:
-
- - Fixed bug #923: Xdebug + Netbeans + ext/MongoDB crash on MongoCursor instance
- - Fixed bug #929: Directory name management in xdebug.profiler_output_dir
- - Fixed bug #931: xdebug_str_add does not check for NULL str before calling strlen on it
- - Fixed bug #935: Document the return value from xdebug_get_code_coverage()
- - Fixed bug #947: Newlines converted when html_errors = 0
-
-
-
-
- 2013-03-23
-
-
- 2.2.2
- 2.2.2
-
-
- stable
- stable
-
- BSD style
-
-Sat, Mar 23, 2013 - xdebug 2.2.2
-
-+ Added features:
-
- - Support for PHP 5.5.
-
-= Fixed bugs:
-
- - Fixed bug #598: Use HTTP_X_FORWARDED_FOR to determine remote debugger.
- - Fixed bug #625: xdebug_get_headers() -> Headers are reset unexpectedly.
- - Fixed bug #811: PHP Documentation Link.
- - Fixed bug #818: Require a php script in the PHP_RINIT causes Xdebug to crash.
- - Fixed bug #903: xdebug_get_headers() returns replaced headers.
- - Fixed bug #905: Support PHP 5.5 and generators.
- - Fixed bug #920: AM_CONFIG_HEADER is depreciated.
-
-
-
-
-
- 2.2.1
- 2.2.1
-
-
- stable
- stable
-
- 2012-07-14
- BSD style
-
-= Fixed bugs:
-
- - Fixed bug #843: Text output depends on php locale.
- - Fixed bug #838/#839/#840: Debugging static properties crashes Xdebug.
- - Fixed bug #821: Variable assignments (beginning with =>) should be
- indented one more scope.
- - Fixed bug #811: PHP Documentation Link.
- - Fixed bug #800: var_dump(get_class(new foo\bar')) add an extra "\" in
- class name.
-
-
-
-
- 2.2.0
- 2.2.0
-
-
- stable
- stable
-
- 2012-05-08
- BSD style
-
-Tue, May 08, 2012 - xdebug 2.2.0
-
-+ Added features:
-
- - Support for PHP 5.4.
-
- - Added ANSI colour output for the shell. (Including patches by Michael
- Maclean)
- - Added var_dump() overloading on the command line (issue #457).
-
- - Added better support for closures in stack and function traces.
- - Added the size of arrays to the overloaded variable output, so that you
- know how many elements there are.
- - Added support for X-HTTP-FORWARDED-FOR before falling back to REMOTE_ADDR
- (issue #660). (Patch by Hannes Magnusson)
- - Added the method call type to xdebug_get_function_stack() (issue #695).
- - Added extra information to error printouts to tell that the error
- suppression operator has been ignored due to xdebug.scream.
- - Added a error-specific CSS class to stack traces.
-
-+ New settings:
-
- - xdebug.cli_color for colouring output on the command line (Unix only).
- - Added xdebug.trace_enable_trigger to triger function traces through a
- GET/POST/COOKIE parameter (issue #517). (Patch by Patrick Allaert)
- - Added support for the 'U' format specifier for function trace and
- profiler filenames.
-
-+ Changes:
-
- - Improved performance by lazy-initializing data structures.
- - Improved code coverage performance. (Including some patches by Taavi
- Burns)
- - Improved compatibility with KCacheGrind.
- - Improved logging of remote debugging connections, by added connection
- success/failure logging to the xdebug.remote_log functionality.
-
-= Fixed bugs:
-
- - Fixed bug #827: Enabling Xdebug causes phpt tests to fail because of
- var_dump() formatting issues.
- - Fixed bug #823: Single quotes are escaped in var_dumped string output.
- - Fixed issue #819: Xdebug 2.2.0RC2 can't stand on a breakpoint more than 30 seconds.
- - Fixed bug #801: Segfault with streamwrapper and unclosed $fp on
- destruction.
- - Fixed issue #797: Xdebug crashes when fetching static properties.
- - Fixed bug #794: Allow coloured output on Windows.
- - Fixed bug #784: Unlimited feature for var_display_max_data and
- var_display_max_depth is undocumented.
- - Fixed bug #774: Apache crashes on header() calls.
- - Fixed bug #764: Tailored Installation instructions do not work.
- - Fixed bug #758: php_value xdebug.idekey is ignored in .htaccess files
- - Fixed bug #728: Profiler reports __call() invocations confusingly/wrongly.
- - Fixed bug #687: Xdebug does not show dynamically defined variable.
- - Fixed bug #662: idekey is set to running user.
- - Fixed bug #627: Added the realpath check.
-
-
-
-
- 2.2.0RC2
- 2.2.0RC2
-
-
- stable
- stable
-
- 2012-04-22
- BSD style
-
-Tue, Apr 22, 2012 - xdebug 2.2.0rc2
-
-= Fixed bugs:
-
- - Fixed bug #801: Segfault with streamwrapper and unclosed $fp on
- destruction.
- - Fixed bug #794: Allow coloured output on Windows.
- - Fixed bug #784: Unlimited feature for var_display_max_data and
- var_display_max_depth is undocumented.
- - Fixed bug #774: Apache crashes on header() calls.
- - Fixed bug #764: Tailored Installation instructions do not work.
- - Fixed bug #758: php_value xdebug.idekey is ignored in .htaccess files
- - Fixed bug #662: idekey is set to running user.
-
-
-
-
- 2.2.0RC1
- 2.2.0RC1
-
-
- stable
- stable
-
- 2012-03-12
- BSD style
-
-Tue, Mar 13, 2012 - xdebug 2.2.0rc1
-
-+ Added features:
-
- - Support for PHP 5.4.
-
- - Added ANSI colour output for the shell. (Including patches by Michael
- Maclean)
- - Added var_dump() overloading on the command line (issue #457).
-
- - Added better support for closures in stack and function traces.
- - Added the size of arrays to the overloaded variable output, so that you
- know how many elements there are.
- - Added support for X-HTTP-FORWARDED-FOR before falling back to REMOTE_ADDR
- (issue #660). (Patch by Hannes Magnusson)
- - Added the method call type to xdebug_get_function_stack() (issue #695).
- - Added extra information to error printouts to tell that the error
- suppression operator has been ignored due to xdebug.scream.
- - Added a error-specific CSS class to stack traces.
-
-
-+ New settings:
-
- - xdebug.cli_color for colouring output on the command line (Unix only).
- - Added xdebug.trace_enable_trigger to triger function traces through a
- GET/POST/COOKIE parameter (issue #517). (Patch by Patrick Allaert)
- - Added support for the 'U' format specifier for function trace and
- profiler filenames.
-
-+ Changes:
-
- - Improved performance by lazy-initializing data structures.
- - Improved code coverage performance. (Including some patches by Taavi
- Burns)
- - Improved compatibility with KCacheGrind.
- - Improved logging of remote debugging connections, by added connection
- success/failure logging to the xdebug.remote_log functionality.
-
-= Fixed bugs:
-
- - No additional bug fixes besides the ones from the 2.1 branch up til
- Xdebug 2.1.4.
-
-
-
-
- 2.1.4
- 2.1.4
-
-
- stable
- stable
-
- 2012-03-12
- BSD style
-
-= Fixed bugs:
-
- - Fixed bug #788: Collect errors eats fatal errors.
- - Fixed bug #787: Segmentation Fault with PHP header_remove().
- - Fixed bug #778: Xdebug session in Eclipse crash whenever it run into
- simplexml_load_string call.
- - Fixed bug #756: Added support for ZEND_*_*_OBJ and self::*.
- - Fixed bug #747: Still problem with error message and soap client / soap
- server.
- - Fixed bug #744: new lines in a PHP file from Windows are displayed with
- an extra white line with var_dump().
- - Fixed an issue with debugging and the eval command.
- - Fixed compilation with ZTS on PHP < 5.3
-
-
-
-
- 2.1.3
- 2.1.3
-
-
- stable
- stable
-
- 2012-01-25
- BSD style
-
-= Fixed bugs:
-
- - Fixed bug #725: EG(current_execute_data) is not checked in xdebug.c,
- xdebug_statement_call.
- - Fixed bug #723: xdebug is stricter than PHP regarding Exception property
- types.
- - Fixed bug #714: Cachegrind files have huge (wrong) numbers in some lines.
- - Fixed bug #709: Xdebug doesn't understand E_USER_DEPRECATED.
- - Fixed bug #698: Allow xdebug.remote_connect_back to be set in .htaccess.
- - Fixed bug #690: Function traces are not appended to file with
- xdebug_start_trace() and xdebug.trace_options=1.
- - Fixed bug #623: Static properties of a class can be evaluated only with
- difficulty.
- - Fixed bug #614/#619: Viewing private variables in base classes through
- the debugger.
- - Fixed bug #609: Xdebug and SOAP extension's error handlers conflict.
- - Fixed bug #606/#678/#688/#689/#704: crash after using eval on an
- unparsable, or un-executable statement.
- - Fixed bug #305: xdebug exception handler doesn't properly handle special
- chars.
-
-+ Changes:
-
- - Changed xdebug_break() to hint to the statement execution trap instead of
- breaking forcefully adding an extra stackframe.
- - Prevent Xdebug 2.1.x to build with PHP 5.4.
-
-
-
-
- 2.1.2
- 2.1.2
-
-
- stable
- stable
-
- 2011-07-28
- BSD style
-
-= Fixed bugs:
-
- - Fixed bug #622: Working with eval() code is inconvenient and difficult.
- - Fixed bug #684: xdebug_var_dump - IE does not support &.
- - Fixed bug #693: Cachegrind files not written when filename is very long.
- - Fixed bug #697: Incorrect code coverage of function arguments when using
- XDEBUG_CC_UNUSED.
- - Fixed bug #699: Xdebug gets the filename wrong for the countable
- interface.
- - Fixed bug #703 by adding another opcode to the list that needs to be
- overridden.
-
-
-
-
- 2.1.2
- 2.1.2
-
-
- stable
- stable
-
- 2011-07-28
- BSD style
-
-= Fixed bugs:
-
- - Fixed bug #622: Working with eval() code is inconvenient and difficult.
- - Fixed bug #684: xdebug_var_dump - IE does not support &.
- - Fixed bug #693: Cachegrind files not written when filename is very long.
- - Fixed bug #697: Incorrect code coverage of function arguments when using
- XDEBUG_CC_UNUSED.
- - Fixed bug #699: Xdebug gets the filename wrong for the countable
- interface.
- - Fixed bug #703 by adding another opcode to the list that needs to be
- overridden.
-
-
-
-
- 2.1.1
- 2.1.1
-
-
- stable
- stable
-
- 2011-03-28
- BSD style
-
-Mon, Mar 28, 2011 - xdebug 2.1.1
-
-= Fixed bugs:
-
- - Fixed ZTS compilation.
-
-
-
-
- 2.1.1RC1
- 2.1.1RC1
-
-
- beta
- beta
-
- 2011-03-22
- BSD style
-
-Tue, Mar 22, 2011 - xdebug 2.1.1rc1
-
-= Fixed bugs:
-
- = Debugger
- - Fixed bug #518: Removed CLASSNAME pseudo-property optional.
- - Fixed bug #592: Xdebug crashes with run after detach.
- - Fixed bug #596: Call breakpoint never works with instance methods, only
- static methods.
- - Fixed JIT mode in the debugger so that it works for xdebug_break() too.
-
- = Profiler
- - Fixed bug #631: Summary not written when script ended with "exit()".
- - Fixed bug #639: Xdebug profiling: output not correct - missing 'cfl='.
- - Fixed bug #642: Fixed line numbers for offsetGet, offsetSet,
- __get/__set/__isset/__unset and __call in profile files and stack
- traces/function traces.
- - Fixed bug #643: Profiler gets line numbers wrong.
- - Fixed bug #653: XDebug profiler crashes with %H in file name and non
- standard port.
-
- = Others
- - Fixed bug #651: Incorrect code coverage after empty() in conditional.
- - Fixed bug #654: Xdebug hides error message in CLI.
- - Fixed bug #665: Xdebug does not respect display_errors=stderr.
- Patch by Ben Spencer <dangerous.ben@gmail.com>
- - Fixed bug #670: Xdebug crashes with broken "break x" code.
-
-
-
-
- 2.1.0
- 2.1.0
-
-
- stable
- stable
-
- 2010-06-29
- BSD style
-
-Tue, Jun 29, 2010 - xdebug 2.1.0
-
-= Fixed bugs:
- - Fixed bug #562: Incorrect coverage information for closure function
- headers.
- - Fixed bug #566: Xdebug crashes when using conditional breakpoints.
- - Fixed bug #567: xdebug_debug_zval and xdebug_debug_zval_stdout don't work
- with PHP 5.3. (Patch by Endo Hiroaki).
- - Fixed bug #570: undefined symbol: zend_memrchr.
-
-
-
-
- 2.1.0RC1
- 2.1.0RC1
-
-
- beta
- beta
-
- 2010-02-27
- BSD style
-
-Thu, Apr 06, 2010 - xdebug 2.1.0rc1
-
-= Fixed bugs:
- - Fixed bug #494: Private attributes of parent class unavailable when
- inheriting.
- - Fixed bug #400: Xdebug shows errors, even when PHP is request startup
- mode.
- - Fixed bug #421: xdebug sends back invalid characters in xml sometimes.
- - Fixed bug #475: Property names with null chars are not sent fully to the
- client.
- - Fixed bug #480: Issues with the reserved resource in multi threaded
- environments (Patch by Francis.Grolemund@netapp.com).
- - Fixed bug #558: PHP segfaults when running a nested eval.
-
-
-
-
- 2.1.0beta3
- 2.1.0beta3
-
-
- beta
- beta
-
- 2010-02-27
- BSD style
-
-Sat, Feb 27, 2010 - xdebug 2.1.0beta3
-
-= Fixed bugs:
- - Fixed memory corruption issues.
- - Fixed a threading related issue for code-coverage.
- - Fixed bug #532: XDebug breaks header() function.
- - DBGP: Prevent Xdebug from returning properties when a too high page number
- has been requested.
-
-
-
-
- 2.1.0beta2
- 2.1.0beta2
-
-
- beta
- beta
-
- 2010-02-03
- BSD style
-
-Wed, Feb 03, 2010 - xdebug 2.1.0beta2
-
-= Fixed bugs:
- - Fixed memory leak in breakpoint handling.
- - Fixed bug #528: Core dump generated with remote_connect_back option set
- and CLI usage.
- - Fixed bug #515: declare(ticks) statement confuses code coverage.
- - Fixed bug #512: DBGP: breakpoint_get doesn't return conditions in its
- response.
- - Possible fix for bug #507/#517: Crashes because of uninitalised header
- globals.
- - Fixed bug #501: Xdebug's variable tracing misses POST_INC and variants.
-
-
-
-
- 2.1.0beta1
- 2.1.0beta1
-
-
- beta
- beta
-
- 2010-01-03
- BSD style
-
-Sun, Jan 03, 2010 - xdebug 2.1.0beta1
-
-+ Added features:
- - Added error display collection and suppressions.
- - Added the recording of headers being set in scripts.
- - Added variable assignment tracing.
- - Added the ability to turn of the default overriding of var_dump().
- - Added "Scream" support, which disables the @ operator.
- - Added a trace-file analysing script.
- - Added support for debugging into phars.
- - Added a default xdebug.ini. (Patch by Martin Schuhfu
- <martins@spot-media.de>)
- - Added function parameters in computerized function traces.
- - PHP 5.3 compatibility.
- - Improved code coverage accuracy.
-
- + New functions:
- - xdebug_get_formatted_function_stack(), which returns a formatted function
- stack instead of displaying it.
- - xdebug_get_headers(), which returns all headers that have been set in a
- script, both explicitly with things like header(), but also implicitly
- for things like setcookie().
- - xdebug_start_error_collection(), xdebug_stop_error_collection() and
- xdebug_get_collected_errors(), which allow you to collect all notices,
- warnings and error messages that Xdebug generates from PHP's
- error_reporting functionality so that you can output them at a later
- point in your script by hand.
-
- + New settings:
- - xdebug.collect_assignments, which enables the emitting of variable
- assignments in function traces.
- - xdebug.file_line_format, to generate a link with a specific format for
- every filename that Xdebug outputs.
- - xdebug.overload_var_dump, which allows you to turn off Xdebug's version
- of var_dump().
- - xdebug.remote_cookie_expire_time, that controls the length of a
- remote debugging session. (Patch by Rick Pannen <pannen@gmail.com>)
- - xdebug.scream, which makes the @ operator to be ignored.
-
-+ Changes:
- - Added return values for xdebug_start_code_coverage() and
- xdebug_stop_code_coverage() to indicate whether the action was
- successful. xdebug_start_code_coverage() will return TRUE if the call
- enabled code coverage, and FALSE if it was already enabled.
- xdebug_stop_code_coverage() will return FALSE when code coverage wasn't
- started yet and TRUE if it was turned on.
- - Added an optional argument to xdebug_print_function_stack() to display
- your own message. (Patch by Mikko Koppanen).
- - All HTML output as generated by Xdebug now has a HTML "class" attribute
- for easy CSS formatting.
-
-- Removed features:
- - Support for PHP versions lower than PHP 5.1 have been dropped.
- - The PHP3 and GDB debugger engines have been removed.
-
-= Fixed bugs:
- - Fixed support for showing $this in remote debugging sessions.
- - Fixed bug in formatting the display of "Variables in the local scope".
- - Possible fix for a threading issue where the headers gathering function
- would create stack overflows.
- - Possible fix for #324: xdebug_dump_superglobals() only dumps superglobals
- that were accessed before, and #478: XDebug 2.0.x can't use %R in
- xdebug.profiler_output_name if register_long_arrays is off.
-
- - Fixed bug #505: %s in xdebug.trace_output_name breaks functions traces.
- - Fixed bug #494: Private attributes of parent class unavailable when
- inheriting.
- - Fixed bug #486: feature_get -n breakpoint_types returns out of date list.
- - Fixed bug #476: Xdebug doesn't support PHP 5.3's exception chaining.
- - Fixed bug #472: Dead Code Analysis for code coverage messed up after goto.
- - Fixed bug #470: Catch blocks marked as dead code unless executed.
- - Fixed bug #469: context_get for function variables always appear as
- "uninitialized".
- - Fixed bug #468: Property_get on $GLOBALS works only at top-level, by
- adding GLOBALS to the super globals context.
- - Fixed bug #453: Memory leaks.
- - Fixed bug #445: error_prepend_string and error_append_string are ignored
- by xdebug_error_cb. (Patch by Kent Davidson <kent@marketruler.com>)
- - Fixed bug #442: configure: error: "you have strange libedit".
- - Fixed bug #439: Xdebug crash in xdebug_header_handler.
- - Fixed bug #423: Conflicts with funcall.
- - Fixed bug #419: Make use of P_tmpdir if defined instead of hard coded
- '/tmp'.
- - Fixed bug #417: Response of context_get may lack page and pagesize
- attributes.
- - Fixed bug #411: Class/function breakpoint setting does not follow the
- specs.
- - Fixed bug #393: eval returns array data at the previous page request.
- - Fixed bug #391: Xdebug doesn't stop executing script on catchable fatal
- errors.
- - Fixed bug #389: Destructors called on fatal error.
- - Fixed bug #368: Xdebug's debugger bails out on a parse error with the
- eval command.
- - Fixed bug #356: Temporary breakpoints persist.
- - Fixed bug #355: Function numbers in trace files weren't unique.
- - Fixed bug #340: Segfault while throwing an Exception.
- - Fixed bug #328: Private properties are incorrectly enumerated in case of
- extended classes.
- - Fixed bug #249: Xdebug's error handler messes up with the SOAP
- extension's error handler.
-
-+ DBGP:
- - Fixed cases where private properties where shown for objects, but not
- accessible.
- - Added a patch by Lucas Nealan (lucas@php.net) and Brian Shire
- (shire@php.net) of Facebook to allow connections to the initiating
- request's IP address for remote debugging.
- - Added the -p argument to the eval command as well, pending inclusion into
- DBGP.
- - Added the retrieval of a file's execution lines. I added a new
- un-official method called xcmd_get_executable_lines which requires the
- stack depth as argument (-d). You can only fetch this information for
- stack frames as it needs an available op-array which is only available
- when a function is executed.
- - Added a fake "CLASSNAME" property to objects that are returned in debug
- requests to facilitate deficiencies in IDEs that fail to show the "classname"
- XML attribute.
-
-
-
-
- 2.0.5
- 2.0.5
-
-
- stable
- stable
-
- 2009-07-03
- BSD style
-
-Fri, Jul 03, 2009 - xdebug 2.0.5
-
-= Fixed bugs:
- - Fixed bug #425: memory leak (around 40MB for each request) when using
- xdebug_start_trace.
- - Fixed bug #422: Segfaults when using code coverage with a parse error in
- the script.
- - Fixed bug #418: compilation breaks with CodeWarrior for NetWare.
- - Fixed bug #403: 'call' and 'return' breakpoints triggers both on call and
- return for class method breakpoints.
- - Fixed TSRM issues for PHP 5.2 and PHP 5.3. (Original patch by Elizabeth
- M. Smith).
- - Fixed odd crash bugs, due to GCC 4 sensitivity.
-
-
-
-
- 2.0.4
- 2.0.4
-
-
- stable
- stable
-
- 2008-12-30
- BSD style
-
-Tue, Dec 30, 2008 - xdebug 2.0.4
-
-= Fixed bugs:
- - Fixed for strange jump positions in path analysis.
- - Fixed issues with code coverage crashing on parse errors.
- - Fixed code code coverage by overriding more opcodes.
- - Fixed issues with Xdebug stalling/crashing when detaching from remote
- debugging.
- - Fixed crash on Vista where memory was freed with routines from a different
- standard-C library than it was allocated with. (Patch by Eric Promislow
- <ericp@activestate.com>).
- - Link against the correct CRT library. (Patch by Eric Promislow
- <ericp@activestate.com>).
- - Sort the symbol elements according to name. (Patch by Eric Promislow
- <ericp@activestate.com>).
- - Fixed support for mapped-drive UNC paths for Windows. (Patch by Eric
- Promislow <ericp@activestate.com>).
- - Fixed a segfault in interactive mode while including a file.
- - Fixed a crash in super global dumping in case somebody was strange enough
- to reassign them to a value type other than an Array.
- - Simplify version checking for libtool. (Patch by PGNet
- <pgnet.trash@gmail.com>).
- - Fixed display of unused returned variables from functions in PHP 5.3.
- - Include config.w32 in the packages as well.
- - Fixed .dsp for building with PHP 4.
-
-+ Added features:
- - Support debugging into phars.
- - Basic PHP 5.3 support.
-
-
-
-
- 2.0.3
- 2.0.3
-
-
- stable
- stable
-
- 2008-04-09
- BSD style
-
-Wed, Apr 09, 2008 - xdebug 2.0.3
-
-= Fixed bugs:
- - Fixed bug #338: Crash with: xdebug.remote_handler=req.
- - Fixed bug #334: Code Coverage Regressions.
- - Fixed abstract method detection for PHP 5.3.
- - Fixed code coverage dead-code detection.
- - Ignore ZEND_ADD_INTERFACE, which is on a different line in PHP >= 5.3 for
- some weird reason.
-
-+ Changes:
- - Added a CSS-class for xdebug's var_dump().
- - Added support for the new E_DEPRECATED.
-
-
-
-
- 2.0.2
- 2.0.2
-
-
- stable
- stable
-
- 2007-11-11
- BSD style
-
-Sun, Nov 11, 2007 - xdebug 2.0.2
-
-= Fixed bugs:
- - Fixed bug #325: DBGP: "detach" stops further sessions being established
- from Apache.
- - Fixed bug #321: Code coverage crashes on empty PHP files.
- - Fixed bug #318: Segmentation Fault in code coverage analysis.
- - Fixed bug #315: Xdebug crashes when including a file that doesn't exist.
- - Fixed bug #314: PHP CLI Error Logging thwarted when XDebug Loaded.
- - Fixed bug #300: Direction of var_dump().
- - Always set the transaction_id and command. (Related to bug #313).
-
-
-
-
- 2.0.1
- 2.0.1
-
-
- stable
- stable
-
- 2007-10-29
- BSD style
-
-Sat, Oct 20, 2007 - xdebug 2.0.1
-
-+ Changes:
- - Improved code coverage performance dramatically.
- - PHP 5.3 compatibility (no namespaces yet though).
-
-= Fixed bugs:
- - Fixed bug #301: Loading would cause SIGBUS on Solaris 10 SPARC. (Patch by
- Sean Chalmers)
- - Fixed bug #300: Xdebug does not force LTR rendering for its tables.
- - Fixed bug #299: Computerized traces don't have a newline for return
- entries if memory limit is not enabled.
- - Fixed bug #298: xdebug_var_dump() doesn't handle entity replacements
- correctly concerning string length.
- - Fixed a memory free error related to remote debugging conditions.
- (Related to bug #297).
-
-
-
-
- 2.0.0
- 2.0.0
-
-
- stable
- stable
-
- 2007-07-18
- BSD style
-
-Wed, Jul 18, 2007 - xdebug 2.0.0
-
-+ Changes:
- - Put back the disabling of stack traces - apperently people were relying
- on this. This brings back xdebug_enable(), xdebug_disable() and
- xdebug_is_enabled().
- - xdebug.collect_params is no longer a boolean setting. Although it worked
- fine, phpinfo() showed only just On or Off here.
- - Fixed the Xdebug version of raw_url_encode to not encode : and \. This is
- not necessary according to the RFCs and it makes debug breakpoints work
- on Windows.
-
-= Fixed bugs:
- - Fixed bug #291: Tests that use SPL do not skip when SPL is not available.
- - Fixed bug #290: Function calls leak memory.
- - Fixed bug #289: Xdebug terminates connection when eval() is run in the
- init stage.
- - Fixed bug #284: Step_over on breakpointed line made Xdebug break twice.
- - Fixed bug #283: Xdebug always returns $this with the value of last stack
- frame.
- - Fixed bug #282: %s is not usable for xdebug.profiler_output_name on
- Windows in all stack frames.
- - Fixed bug #280: var_dump() doesn't display key of array as expected.
- - Fixed bug #278: Code Coverage Issue.
- - Fixed bug #273: Remote debugging: context_get does not return context id.
- - Fixed bug #270: Debugger aborts when PHP's eval() is encountered.
- - Fixed bug #265: XDebug breaks error_get_last() .
- - Fixed bug #261: Code coverage issues by overloading zend_assign_dim.
-
-+ DBGP:
- - Added support for "breakpoint_languages".
-
-
-
-
- 2.0.0RC4
- 2.0.0RC4
-
-
- beta
- beta
-
- 2007-05-17
- BSD style
-
-Wed, May 17, 2007 - xdebug 2.0.0rc4
-+ Changes:
- - Use microseconds instead of a tenths of microseconds to avoid confusion in
- profile information.
- - Changed xdebug.profiler_output_name and xdebug.trace_output_name to use
- modifier tags:
- %c = crc32 of the current working directory
- %p = pid
- %r = random number
- %s = script name
- %t = timestamp (seconds)
- %u = timestamp (microseconds)
- %H = $_SERVER['HTTP_HOST']
- %R = $_SERVER['REQUEST_URI']
- %S = session_id (from $_COOKIE if set)
- %% = literal %
-
-= Fixed bugs:
- - Fixed bug #255: Call Stack Table doesn't show Location on Windows.
- - Fixed bug #251: Using the source command with an invalid filename returns
- unexpected result.
- - Fixed bug #243: show_exception_trace="0" ignored.
- - Fixed bug #241: Crash in xdebug_get_function_stack().
- - Fixed bug #240: Crash with xdebug.remote_log on Windows.
- - Fixed a segfault in rendering stack traces to error logs.
- - Fixed a bug that prevented variable names from being recorded for remote
- debug session while xdebug.collect_vars was turned off.
- - Fixed xdebug_dump_superglobals() in case no super globals were
- configured.
-
-- Removed functions:
- - Removed support for Memory profiling as that didn't work properly.
- - Get rid of xdebug.default_enable setting and associated functions:
- xdebug_disable() and xdebug_enable().
-
-+ Added features:
- - Implemented support for four different xdebug.collect_params settings for
- stack traces and function traces.
- - Allow to trigger profiling by the XDEBUG_PROFILE cookie.
-
-+ DBGP:
- - Correctly add namespace definitions to XML.
- - Added the xdebug namespace that adds extra information to breakpoints if
- available.
- - Stopped the use of >error> elements for exception breakpoints, as that
- violates the protocol.
-
-
-
-
- 2.0.0RC3
- 2.0.0RC3
-
-
- beta
- beta
-
- 2007-01-31
- BSD style
-
-Wed, Jan 31, 2007 - xdebug 2.0.0rc3
-+ Changes:
- - Removed the bogus "xdebug.allowed_clients" setting - it was not
- implemented.
- - Optimized used variable collection by switching to a linked list instead
- of a hash. This is about 30% faster, but it needed a quick conversion to
- hash in the case the information had to be shown to remove duplicate
- variable names.
-
-= Fixed bugs:
- - Fixed bug #232: PHP log_errors functionality lost after enabling xdebug
- error handler when CLI is used.
- - Fixed problems with opening files - the filename could cause double free
- issues.
- - Fixed memory tracking as memory_limit is always enabled in PHP 5.2.1 and
- later.
- - Fixed a segfault that occurred when creating printable stack traces and
- collect_params was turned off.
-
-
-
-
- 2.0.0RC2
- 2.0.0RC2
-
-
- beta
- beta
-
- 2006-12-24
- BSD style
-
-Sun, Dec 24, 2006 - xdebug 2.0.0rc2
-+ Added new features:
- - Implemented the "xdebug.var_display_max_children" setting. The default is
- set to 128 children.
- - Added types to fancy var dumping function.
- - Implemented FR #210: Add a way to stop the debug session without having
- to execute a script. The GET/POST parameter "XDEBUG_SESSION_STOP_NO_EXEC"
- works in the same way as XDEBUG_SESSION_STOP, except that the script will
- not be executed.
- - DBGP: Allow postmortem analysis.
- - DBGP: Added the non-standard function xcmd_profiler_name_get.
-
-+ Changes:
- - Fixed the issue where xdebug_get_declared_vars() did not know about
- variables there are in the declared function header, but were not used in
- the code. Due to this change expected arguments that were not send to a
- function will now show up as ??? in stack and function traces in PHP 5.1
- and PHP 5.2.
- - Allow xdebug.var_display_max_data and xdebug.var_display_max_depth
- settings of -1 which will unlimit those settings.
- - DBGP: Sort super globals in Globals overview.
- - DBGP: Fixed a bug where error messages where not added upon errors in the
- protocol.
- - DBGP: Change context 1 from globals (superglobals + vars in bottom most
- stack frame) to just superglobals.
-
-= Fixed bugs:
- - Fixed linking error on AIX by adding libm.
- - Fixed dead code analysis for THROW.
- - Fixed oparray prefill caching for code coverage.
- - Fixed the xdebug.remote_log feature work.
- - DBGP: Fixed a bug where $this did not appear in the local scoped context.
- - DBGP: Reimplemented property_set to use the same symbol fetching function
- as property_get. We now only use eval in case no type (-t) argument was
- given.
- - DBGP: Fixed some issues with finding out the classname, which is
- important for fetching private properties.
- - DBGP: Fixed usage of uninitialized memory that prevented looking up
- numerical array keys while fetching array elements not work properly.
- - Fixed bug #228: Binary safety for stream output and property fetches.
- - Fixed bug #227: The SESSION super global does not show up in the Globals
- scope.
- - Fixed bug #225: xdebug dumps core when protocol is GDB.
- - Fixed bug #224: Compile failure on Solaris.
- - Fixed bug #219: Memory usage delta in traces don't work on PHP 5.2.0.
- - Fixed bug #215: Cannot retrieve nested arrays when the array key is a
- numeric index.
- - Fixed bug #214: The depth level of arrays was incorrectly checked so it
- would show the first page of a level too deep as well.
- - Fixed bug #213: Dead code analysis doesn't take catches for throws into
- account.
- - Fixed bug #211: When starting a new session with a different idekey, the
- cookie is not updated.
- - Fixed bug #209: Additional remote debugging session started when
- triggering shutdown function.
- - Fixed bug #208: Socket connection attempted when XDEBUG_SESSION_STOP.
- - Fixed PECL bug #8989: Compile error with PHP 5 and GCC 2.95.
-
-
-
-
- 2.0.0rc1
- 2.0.0rc1
-
-
- beta
- beta
-
- 2006-10-08
- BSD style
-
-+ Added new features:
- - Implemented FR #70: Provide optional depth on xdebug_call_* functions.
- - Partially implemented FR #50: Resource limiting for variable display. By
- default only two levels of nested variables and max string lengths of 512
- are shown. This can be changed by setting the ini settings
- xdebug.var_display_max_depth and xdebug.var_display_max_data.
- - Implemented breakpoints for different types of PHP errors. You can now
- set an 'exception' breakpoint on "Fatal error", "Warning", "Notice" etc.
- This is related to bug #187.
- - Added the xdebug_print_function_trace() function to display a stack trace on
- demand.
- - Reintroduce HTML tracing by adding a new tracing option "XDEBUG_TRACE_HTML"
- (4).
- - Made xdebug_stop_trace() return the trace file name, so that the
- following works: <?php echo file_get_contents( xdebug_stop_trace() ); ?>
- - Added the xdebug.collect_vars setting to tell Xdebug to collect
- information about which variables are used in a scope. Now you don't need
- to show variables with xdebug.show_local_vars anymore for
- xdebug_get_declared_vars() to work.
- - Make the filename parameter to the xdebug_start_trace() function
- optional. If left empty it will use the same algorithm to pick a filename
- as when you are using the xdebug.auto_trace setting.
-
-+ Changes:
- - Implemented dead code analysis during code coverage for:
- * abstract methods.
- * dead code after return, throw and exit.
- * implicit returns when a normal return is present.
- - Improved readability of stack traces.
- - Use PG(html_errors) instead of checking whether we run with CLI when
- deciding when to use HTML messages or plain text messages.
-
-= Fixed bugs:
- - Fixed bug #203: PHP errors with HTML content processed incorrectly. This
- patch backs out the change that was made to fix bug #182.
- - Fixed bug #198: Segfault when trying to use a non-existing debug handler.
- - Fixed bug #197: Race condition fixes created too many files.
- - Fixed bug #196: Profile timing on Windows does not work.
- - Fixed bug #195: CLI Error after debugging session.
- - Fixed bug #193: Compile problems with PHP 5.2.
- - Fixed bug #191: File/line breakpoints are case-sensitive on Windows.
- - Fixed bug #181: Xdebug doesn't handle uncaught exception output
- correctly.
- - Fixed bug #173: Coverage produces wrong coverage.
- - Fixed a typo that prevented the XDEBUG_CONFIG option "profiler_enable"
- from working.
-
-
-
-
- 2.0.0beta6
- 2.0.0beta6
-
-
- beta
- beta
-
- 2006-06-30
- BSD style
-
-+ Added new features:
- - Implemented FR #137: feature_get for general commands doesn't have a text field.
- - Implemented FR #131: XDebug needs to implement paged child object requests.
- - Implemented FR #124: Add backtrace dumping information when exception thrown.
- - Implemented FR #70: Add feature_get breakpoint_types.
- - Added profiling aggregation functions (patch by Andrei Zmievski)
- - Implemented the "timestamp" option for the xdebug.trace_output_name and
- xdebug.profiler_output_name settings.
- - Added the xdebug.remote_log setting that allows you to log debugger
- communication to a log file for debugging. This can also be set through
- the "remote_log" element in the XDEBUG_CONFIG environment variable.
- - Added a "script" value to the profiler_output_name option. This will write
- the profiler output to a filename that consists of the script's full path
- (using underscores). ie: /var/www/index.php becomes
- var_www_index_php_cachegrind.out. (Patch by Brian Shire).
- - DBGp: Implemented support for hit conditions for breakpoints.
- - DBGp: Added support for conditions for file/line breakpoints.
- - DBGp: Added support for hit value checking to file/line breakpoints.
- - DBGp: Added support for "exception" breakpoints.
-+ Performance improvements:
- - Added a cache that prevents the code coverage functionality from running a
- "which code is executable check" on every function call, even if they
- were executed multiple times. This should speed up code coverage a lot.
- - Speedup Xdebug but only gathering information about variables in scopes when
- either remote debugging is used, or show_local_vars is enabled.
-= Fixed bugs:
- - Fixed bug #184: problem with control chars in code traces
- - Fixed bug #183: property_get -n $this->somethingnonexistent crashes the
- debugger.
- - Fixed bug #182: Errors are not html escaped when being displayed.
- - Fixed bug #180: collected includes not shown in trace files. (Patch by
- Cristian Rodriguez)
- - Fixed bug #178: $php_errormsg and Track errors unavailable.
- - Fixed bug #177: debugclient fails to compile due to Bison.
- - Fixed bug #176: Segfault using SplTempFileObject.
- - Fixed bug #173: Xdebug segfaults using SPL ArrayIterator.
- - Fixed bug #171: set_time_limit stack overflow on 2nd request.
- - Fixed bug #168: Xdebug's DBGp crashes on an eval command where the
- result is an array.
- - Fixed bug #125: show_mem_delta does not calculate correct negative values on
- 64bit machines.
- - Fixed bug #121: property_get -n $r[2] returns the whole hash.
- - Fixed bug #111: xdebug does not ignore set_time_limit() function during debug
- session.
- - Fixed bug #87: Warning about headers when "register_shutdown_function" used.
- - Fixed PECL bug #6940 (XDebug ignores set_time_limit)
- - Fixed Komodo bug 45484: no member data for objects in PHP debugger.
- - Suppress NOP/EXT_NOP from being marked as executable code with Code
- Coverage.
-
-
-
-
- 2.0.0beta5
- 2.0.0beta5
-
-
- beta
- beta
-
- 2005-12-31
- BSD style
-
-+ Added new features:
- - Implemented FR #161: var_dump doesn't show lengths for strings.
- - Implemented FR #158: Function calls from the {main} scope always have the
- line number 0.
- - Implemented FR #156: it's impossible to know the time taken by the last
- func call in xdebug trace mode 0.
- - Implemented FR #153: xdebug_get_declared_vars().
-
-= Fixed bugs:
- - Fixed shutdown crash with ZTS on Win32
- - Fixed bad memory leak when a E_ERROR of exceeding memory_limit was
- thrown.
- - Fixed bug #154: GCC 4.0.2 optimizes too much out with -O2.
- - Fixed bug #141: Remote context_get causes segfault.
-
-
-
-
- 2.0.0beta4
- 2.0.0beta4
-
-
- beta
- beta
-
- 2005-09-24
- BSD style
-
-+ Added new features:
- - Added xdebug_debug_zval_stdout().
- - Added xdebug_get_profile_filename() function which returns the current
- profiler dump file.
- - Updated for latest 5.1 and 6.0 CVS versions of PHP.
- - Added FR #148: Option to append to cachegrind files, instead of
- overwriting.
- - Implemented FR #114: Rename tests/*.php to tests/*.inc
-
-- Changed features:
- - Allow "xdebug.default_enable" to be set everywhere.
-
-= Fixed bugs:
- - DBGP: Xdebug should return "array" with property get, which is defined
- in the typemap to the common type "hash".
- - Fixed bug #142: xdebug crashes with implicit destructor calls.
- - Fixed bug #136: The "type" attribute is missing from stack_get returns.
- - Fixed bug #133: PHP scripts exits with 0 on PHP error.
- - Fixed bug #132: use of eval causes a segmentation fault.
-
-
-
-
- 2.0.0beta3
- 2.0.0beta3
-
-
- beta
- beta
-
- 2005-05-12
- BSD style
-
-+ Added new features:
- - Added the possibility to trigger the profiler by setting
- "xdebug.profiler_enable_trigger" to 1 and using XDEBUG_PROFILE as a get
- parameter.
-
-= Fixed bugs:
- - Fixed a segfault for when an attribute value is NULL on XML string
- generation.
- - Fixed bug #118: Segfault with exception when remote debugging.
- - Fixed bug #117: var_dump dows not work with "private".
- - Fixed bug #109: DBGP's eval will abort the script when the eval statement
- is invalid.
- - Fixed bug #108: log_only still displays some text for errors in included
- files.
- - Fixed bug #107: Code Coverage only detects executable code in used
- functions and classes.
- - Fixed bug #103: crash when running the DBGp command 'eval' on a global
- variable
- - Fixed bug #95: Segfault when deinitializing Xdebug module.
- (Patch by Maxim Poltarak <demiurg@gmail.com>)
-
-
-
-
- 2.0.0beta2
- 2.0.0beta2
-
-
- beta
- beta
-
- 2004-11-28
- BSD style
-
-+ Added new features:
- - DBGP: Added error messages to returned errors (in most cases)
-
-+ Added new functions:
- - xdebug_debug_zval() to debug zvals by printing its refcounts and is_ref
- values.
-
-= Changed features:
- - xdebug_code_coverage_stop() will now clean up the code coverage array,
- unless you specify FALSE as parameter.
- - The proper Xdebug type is "hash" for associative arrays.
- - Extended the code-coverage functionality by returning lines with
- executable code on them, but where not executed with a count value of -1.
-
-= Fixed bugs:
- - DBGP: Make property_get and property_value finally work as they should,
- including retrieving information from different depths then the most top
- stack frame.
- - DBGP: Fix eval'ed $varnames in property_get.
- - DBGP: Support the -d option for property_get.
- - Fixed the exit handler hook to use the new "5.1" way of handling it;
- which fortunately also works with PHP 5.0.
- - Fixed bug #102: Problems with configure for automake 1.8.
- - Fixed bug #101: crash with set_exeception_handler() and uncatched exceptions.
- - Fixed bug #99: unset variables return the name as a string with property_get.
- - Fixed bug #98: 'longname' attribute not returned for uninitialized
- property in context_get request.
- - Fixed bug #94: xdebug_sprintf misbehaves with x86_64/glibc-2.3.3
- - Fixed bug #93: Crash in lookup_hostname on x86_64
- - Fixed bug #92: xdebug_disable() doesn't disable the exception handler.
- - Fixed bug #68: Summary not written when script ended with "exit()".
-
-
-
-
- 2.0.0beta1
- 2.0.0beta1
-
-
- beta
- beta
-
- 2004-09-15
- BSD style
-
-+ Added new features:
- - Added support for the new DBGp protocol for communicating with the debug
- engine.
- - A computerized trace format for easier parsing by external programs.
- - The ability to set remote debugging features via the environment. This
- allows an IDE to emulate CGI and still pass the configuration through to
- the debugger. In CGI mode, PHP does not allow -d arguments.
- - Reimplementation of the tracing code, you can now only trace to file; this greatly
- enhances performance as no string representation of variables need to be
- kept in memory any more.
- - Re-implemented profiling support. Xdebug outputs information the same way
- that cachegrind does so it is possible to use Kcachegrind as front-end.
- - Xdebug emits warnings when it was not loaded as a Zend extension.
- - Added showing private, protected and public to the fancy var_dump()
- replacement function.
- - Added the setting of the TCP_NODELAY socket option to stop delays in
- transferring data to the remote debugger client. (Patch by Christof J. Reetz)
- + DebugClient: Added setting for port to listen on and implemented running
- the previous command when pressing just enter.
-
-+ Added new functions:
- - xdebug_get_stack_depth() to return the current stack depth level.
- - xdebug_get_tracefile_name() to retrieve the name of the tracefile. This
- is useful in case auto trace is enabled and you want to clean the trace
- file.
- - xdebug_peak_memory_usage() which returns the peak memory
- used in a script. (Only works when --enable-memory-limit was enabled)
-
-+ Added feature requests:
- - FR #5: xdebug_break() function which interupts the script for the debug
- engine.
- - FR #30: Dump current scope information in stack traces on error.
- - FR #88: Make the url parameter XDEBUG_SESSION_START optional. So it can
- be disabled and the user does not need to add it.
-
-+ Added new php.ini settings:
- - xdebug.auto_trace_file: to configure a trace file to write to as addition
- to the xdebug.auto_trace setting which just turns on tracing.
- - xdebug.collect_includes: separates collecting
- names of include files from the xdebug.collect_params setting.
- - xdebug.collect_return: showing return values in traces.
- - xdebug.dump_global: with which you can turn off dumping of super globals
- even in you have that configured.
- - xdebug.extended_info: turns off the generation of extended opcodes that
- are needed for stepping and breakpoints for the remote debugger. This is
- useful incase you want to profile memory usage as the generation of this
- extended info increases memory usage of oparrrays by about 33%.
- - xdebug.profiler_output_dir: profiler output directory.
- - xdebug.profiler_enable: enable the profiler.
- - xdebug.show_local_vars: turn off the showing of local variables in the
- top most stack frame on errors.
- - xdebug.show_mem_delta: show differences between current and previous
- memory usage on a function call level.
- - xdebug.trace_options: to configure extra
- options for trace dumping:
- o XDEBUG_TRACE_APPEND option (1)
-
-= Changed features:
- - xdebug_start_trace() now returns the filename of the tracefile (.xt is
- added to the requested name).
- - Changed default debugging protocol to dbgp instead of gdb.
- - Changed default debugger port from 17869 to 9000.
- - Changed trace file naming: xdebug.trace_output_dir is now used to
- configure a directory to dump automatic traces; the trace file name now
- also includes the pid (xdebug.trace_output_name=pid) or a crc32 checksum
- of the current working dir (xdebug.trace_output_name=crc32) and traces
- are not being appended to an existing file anymore, but simply
- overwritten.
- - Removed $this and $GLOBALS from showing variables in the local scope.
-
-- Removed functions:
- - xdebug_get_function_trace/xdebug_dump_function_trace() because of the new
- idea of tracing.
-
-= Fixed bugs:
- - Fixed bug #89: var_dump shows empty strings garbled.
- - Fixed bug #85: Xdebug segfaults when no idekey is set.
- - Fixed bug #83: More than 32 parameters functions make xdebug crash.
- - Fixed bug #75: xdebug's var_dump implementation is not binary safe.
- - Fixed bug #73: komodo beta 4.3.7 crash.
- - Fixed bug #72: breakpoint_get returns wrong structure.
- - Fixed bug #69: Integer overflow in cachegrind summary.
- - Fixed bug #67: Filenames in Xdebug break URI RFC with spaces.
- - Fixed bug #64: Missing include of xdebug_compat.h.
- - Fixed bug #57: Crash with overloading functions.
- - Fixed bug #54: source command did not except missing -f parameter.
- - Fixed bug #53: Feature get misusing the supported attribute.
- - Fixed bug #51: Only start a debug session if XDEBUG_SESSION_START is
- passed as GET or POST parameter, or the DBGP_COOKIE is send to the server.
- Passing XDEBUG_SESSION_STOP as GET/POST parameter will end the debug
- session and removes the cookie again. The cookie is also passed to the
- remote handler backends; for DBGp it is added to the <init> packet.
- - Fixed bug #49: Included file's names should not be stored by address.
- - Fixed bug #44: Script time-outs should be disabled when debugging.
- = Fixed bug #36: GDB handler using print causes segfault with wrong syntax
- - Fixed bug #33: Implemented the use of the ZEND_POST_DEACTIVATE hook. Now we
- can handle destructors safely too.
- - Fixed bug #32: Unusual dynamic variables cause xdebug to crash.
-
-
-
-
- 1.3.1
- 1.3.1
-
-
- stable
- stable
-
- 2004-04-06
- BSD style
-
-= Fixed profiler to aggregate class/method calls correctly. (Robert Beenen)
-= Fixed debugclient to initialize socket structure correctly. (Brandon Philips
- and David Sklar)
-= GDB: Fixed bug where the source file wasn't closed after a "source" command.
- (Derick)
-
-
-
-
- 1.3.0
- 1.3.0
-
-
- stable
- stable
-
- 2003-09-17
- BSD style
-
-= Fixed segfault where a function name didn't exist in case of a
- "call_user_function". (Derick)
-= Fixed reading a filename in case of an callback to a PHP function from an
- internal function (like "array_map()"). (Derick)
-
-
-
-
- 1.3.0rc1
- 1.3.0rc1
-
-
- beta
- beta
-
- 2003-09-17
- BSD style
-
-= Fixed bug with wrong file names for functions called from call_user_*().
- (Derick)
-+ Added the option "dump_superglobals" to the remote debugger. If you set this
- option to 0 the "show-local" and similar commands will not return any data
- from superglobals anymore. (Derick)
-= Fixed bug #2: "pear package" triggers a segfault. (Derick)
-= Fixed crash bug when a function had sprintf style parameters (ie.
- strftime()). (Derick)
-+ Added "id" attribute to <var /> elements in responses from the remove
- debugger when the response method is XML. This makes it possible to
- distinguish between unique elements by use of recursion for example. (Derick)
-= Improved performance greatly by doing lazy folding of variables outside
- trace mode. (Derick)
-= Fixed a bug with "quit", if it was used it disabled the extension for the
- current process. (Derick)
-+ Added the "full" argument to the remote command "backtrace". When this
- argument is passed, the local variables will be returned to for each frame in
- the stack. (Derick)
-+ Implemented xdebug_time_index() which returns the time passed since the
- start of the script. This change also changes the output of the tracing
- functions as the start time will no longer be the first function call, but
- the real start time of the script. (Derick)
-+ Implemented the "show-local" command (shows all local variables in the
- current scope including all contents). (Derick)
-+ Implemented conditions for breakpoints in the "break" command. (Derick)
-
-
-
-
- 1.2.0
- 1.2.0
-
-
- stable
- stable
-
- 2003-04-21
- BSD style
-
-= Fixed compilation on MacOSX. (Derick)
-
-
-
-
- 1.2.0rc2
- 1.2.0rc2
-
-
- beta
- beta
-
- 2003-04-15
- BSD style
-
-= Fixed handling Windows paths in the debugger. (Derick)
-= Fixed getting zvals out of Zend Engine 2. (Derick)
-
-
-
-
- 1.2.0rc1
- 1.2.0rc1
-
-
- beta
- beta
-
- 2003-04-06
- BSD style
-
-+ Added code coverage functions to check which lines and how often they were
- touched during execution. (Derick)
-+ Made Xdebug compatible with Zend Engine 2. (Derick)
-+ Added dumping of super globals on errors. (Harald Radi)
-+ Added XML protocol for the debugger client. (Derick)
-= Fixed handling of "continue" (so that it also continues with the script).
- (Derick)
-+ Additions to the remote debugger: "eval" (evaluate any PHP code from the
- debugger client). (Derick)
-+ Added profiling support to xdebug. This introduces 3 new functions,
- xdebug_start_profiling() that begins profiling process,
- xdebug_stop_profiling() that ends the profiling process and
- xdebug_dump_function_trace() that dumps the profiling data. (Ilia)
-+ Implemented the "kill" (kills the running script) and "delete" (removes
- a breakpoint on a specified element) command. (Derick)
-
-
-
-
- 1.1.0
- 1.1.0
-
-
- stable
- stable
-
- 2002-11-11
- BSD style
-
-+ Implemented the "list" (source listing), "print" (printing variable
- contents), "show" (show all variables in the scope), "step" (step through
- execution), "pwd" (print working directory), "next" (step over) and "finish"
- (step out) commands for the remote debugger. (Derick)
-= Fixed lots of small bugs, under them memory leaks and crash bugs. (Derick)
-
-
-
-
- 1.1.0pre2
- 1.1.0pre2
-
-
- beta
- beta
-
- 2002-10-29
- BSD style
-
-+ Implemented class::method, object->method and file.ext:line style
- breakpoints. (Derick)
-+ Added xdebug.collect_params setting. If this setting is on (the default)
- then Xdebug collects all parameters passed to functions, otherwise they
- are not collected at all. (Derick)
-+ Implemented correct handling of include/require and eval. (Derick)
-
-
-
-
- 1.1.0pre1
- 1.1.0pre1
-
-
- beta
- beta
-
- 2002-10-22
- BSD style
-
-+ Added automatic starting of function traces (xdebug.auto_trace, defaulting to
- "off"). (Derick)
-- Xdebug no longer supports PHP versions below PHP 4.3.0pre1. (Derick)
-+ Added gdb compatible debugger handler with support for simple (function only)
- breakpoints. (Derick)
-= Implemented a new way to get class names and file names. (Derick, Thies C.
- Arntzen <thies@thieso.net>)
-+ Added time-index and memory footprint to CLI dumps. (Derick)
-+ Implemented remote debugger handler abstraction. (Derick)
-+ Added a php3 compatible debugger handler. (Derick)
-
-
-
-
- 1.0.0rc1
- 1.0.0rc1
-
-
- beta
- beta
-
- 2002-09-01
- BSD style
-
-+ Implemented gathering of parameters to internal functions (only available
- in combination with PHP 4.3.0-dev). (Derick)
-= Implemented a new way to get class names and file names. (Derick, Thies C.
- Arntzen >thies@thieso.net<)
-+ Added support for error messages with stack trace in syslog. (Sergio
- Ballestrero >s.ballestrero@planetweb.it<)
-= Windows compilation fixes. (Derick)
-
-
-
-
- 0.9.0
- 0.9.0
-
-
- beta
- beta
-
- 2002-06-16
- BSD style
-
-= Fixed a memory leak in delayed included files. (Derick)
-- Added support for PHP 4.1.2. (Derick)
-= Rewrote xdebug_get_function_stack() and xdebug_get_function_trace() to return
- data in multidimensional arrays. (Derick)
-= Fixed compiling without memory limit enabled (Sander Roobol, Derick)
-- Add support for classnames, variable include files and variable
- function names. (Derick)
-- Implemented links to the PHP Manual in traces. (Derick)
-- Added timestamps and memory usage to function traces. (Derick)
-= Fixed crash when using an user defined session handler. (Derick)
-+ Implemented variable function names ($a = 'foo'; $f();) for use in
- traces. (Derick)
-
-
-
-
- 0.8.0
- 0.8.0
-
-
- beta
- beta
-
- 2002-05-26
- BSD style
-
-+ Implemented much better parameter tracing for user defined
- functions. (Derick)
-= Renamed xdebug_get_function_trace() to xdebug_dump_function_trace().
- (Derick)
-= Implemented new xdebug_get_function_trace() to return the function trace in
- an array. (Derick)
-+ Added a parameter to xdebug_start_trace(). When this parameter is used,
- xdebug will dump a function trace to the filename which this parameter
- speficies. (Derick)
-- Fix a problem with nested member functions. (Derick)
-= Make configure scripts work with PHP 4.2.x. (Derick)
-+ Implemented handling single-dimensional constant arrays passed to a
- function. (Derick)
-= Fix function traces in windows. (Derick)
-+ Implemented function traces, which you can start and stop with
- xdebug_start_trace() and xdebug_stop_trace(). You can view the trace by using
- the return array from xdebug_get_function_trace(). (Derick)
-= Fixed segfaults with xdebug_call_*(). (Derick)
-
-
-
-
- 0.7.0
- 0.7.0
-
-
- beta
- beta
-
- 2002-05-08
- BSD style
-
-+ Implemented handling of static method calls (foo::bar). (Derick)
-+ Added correct handling of include(_once)/require(_once) and eval().
- (Derick)
-+ Added ini setting to change the default setting for enabling showing
- enhanced error messages. (Defaults to "On"). (Derick)
-+ Added the functions xdebug_enable() and xdebug_disable() to change the
- showing of stack traces from within your code. (Derick)
-= Fixed the extension to show all errors. (Derick)
-+ Implemented xdebug_memory_usage() which returns the memory in use by PHPs
- engine. (Derick)
-
-
-
-
-
diff --git a/php_xdebug.h b/php_xdebug.h
index fece387..85e1149 100644
--- a/php_xdebug.h
+++ b/php_xdebug.h
@@ -17,8 +17,8 @@
#ifndef PHP_XDEBUG_H
#define PHP_XDEBUG_H
-#define XDEBUG_NAME "Xdebug"
-#define XDEBUG_VERSION "3.6.0-dev"
+#define XDEBUG_NAME "PHP Debugger"
+#define XDEBUG_VERSION "0.1.0-dev"
#define XDEBUG_AUTHOR "Derick Rethans"
#define XDEBUG_COPYRIGHT "Copyright (c) 2002-2025 by Derick Rethans"
#define XDEBUG_COPYRIGHT_SHORT "Copyright (c) 2002-2025"
diff --git a/php_xdebug_arginfo.h b/php_xdebug_arginfo.h
index d634207..c5e323a 100644
--- a/php_xdebug_arginfo.h
+++ b/php_xdebug_arginfo.h
@@ -28,5 +28,11 @@ static const zend_function_entry ext_functions[] = {
ZEND_FE(xdebug_info, arginfo_xdebug_info)
ZEND_FE(xdebug_is_debugger_active, arginfo_xdebug_is_debugger_active)
ZEND_FE(xdebug_notify, arginfo_xdebug_notify)
+ /* php_debugger_* aliases */
+ ZEND_FALIAS(php_debugger_break, xdebug_break, arginfo_xdebug_break)
+ ZEND_FALIAS(php_debugger_connect_to_client, xdebug_connect_to_client, arginfo_xdebug_connect_to_client)
+ ZEND_FALIAS(php_debugger_info, xdebug_info, arginfo_xdebug_info)
+ ZEND_FALIAS(php_debugger_is_debugger_active, xdebug_is_debugger_active, arginfo_xdebug_is_debugger_active)
+ ZEND_FALIAS(php_debugger_notify, xdebug_notify, arginfo_xdebug_notify)
ZEND_FE_END
};
diff --git a/src/debugger/com.c b/src/debugger/com.c
index 6f34853..cc4dcae 100644
--- a/src/debugger/com.c
+++ b/src/debugger/com.c
@@ -729,6 +729,9 @@ bool xdebug_should_ignore(void)
const char *found_in_global;
ignore_value = xdebug_lib_find_in_globals("XDEBUG_IGNORE", &found_in_global);
+ if (!ignore_value) {
+ ignore_value = xdebug_lib_find_in_globals("PHP_DEBUGGER_IGNORE", &found_in_global);
+ }
if (!ignore_value) {
return false;
@@ -805,6 +808,12 @@ static int xdebug_handle_start_session()
(dummy = zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_GET]), "XDEBUG_SESSION_START", sizeof("XDEBUG_SESSION_START") - 1)) != NULL
) || (
(dummy = zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_POST]), "XDEBUG_SESSION_START", sizeof("XDEBUG_SESSION_START") - 1)) != NULL
+ ) || (
+ (dummy = zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_ENV]), "PHP_DEBUGGER_SESSION_START", sizeof("PHP_DEBUGGER_SESSION_START") - 1)) != NULL
+ ) || (
+ (dummy = zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_GET]), "PHP_DEBUGGER_SESSION_START", sizeof("PHP_DEBUGGER_SESSION_START") - 1)) != NULL
+ ) || (
+ (dummy = zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_POST]), "PHP_DEBUGGER_SESSION_START", sizeof("PHP_DEBUGGER_SESSION_START") - 1)) != NULL
))
&& !SG(headers_sent)
) {
@@ -816,7 +825,8 @@ static int xdebug_handle_start_session()
xdebug_setcookie("XDEBUG_SESSION", sizeof("XDEBUG_SESSION") - 1, Z_STRVAL_P(dummy), Z_STRLEN_P(dummy), 0, "/", 1, NULL, 0, 0, 1, 0);
activate_session = 1;
} else if (
- (dummy_env = getenv("XDEBUG_SESSION_START")) != NULL
+ (dummy_env = getenv("XDEBUG_SESSION_START")) != NULL ||
+ (dummy_env = getenv("PHP_DEBUGGER_SESSION_START")) != NULL
) {
xdebug_log(XLOG_CHAN_DEBUG, XLOG_DEBUG, "Found 'XDEBUG_SESSION_START' ENV variable, with value '%s'", dummy_env);
@@ -827,8 +837,8 @@ static int xdebug_handle_start_session()
}
activate_session = 1;
- } else if (getenv("XDEBUG_CONFIG")) {
- xdebug_log(XLOG_CHAN_DEBUG, XLOG_DEBUG, "Found 'XDEBUG_CONFIG' ENV variable");
+ } else if (getenv("XDEBUG_CONFIG") || getenv("PHP_DEBUGGER_CONFIG")) {
+ xdebug_log(XLOG_CHAN_DEBUG, XLOG_DEBUG, "Found 'XDEBUG_CONFIG' or 'PHP_DEBUGGER_CONFIG' ENV variable");
if (XG_DBG(ide_key) && *XG_DBG(ide_key) && !SG(headers_sent)) {
xdebug_setcookie("XDEBUG_SESSION", sizeof("XDEBUG_SESSION") - 1, XG_DBG(ide_key), strlen(XG_DBG(ide_key)), 0, "/", 1, NULL, 0, 0, 1, 0);
@@ -853,6 +863,10 @@ static void xdebug_handle_stop_session()
zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_GET]), "XDEBUG_SESSION_STOP", sizeof("XDEBUG_SESSION_STOP") - 1) != NULL
) || (
zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_POST]), "XDEBUG_SESSION_STOP", sizeof("XDEBUG_SESSION_STOP") - 1) != NULL
+ ) || (
+ zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_GET]), "PHP_DEBUGGER_SESSION_STOP", sizeof("PHP_DEBUGGER_SESSION_STOP") - 1) != NULL
+ ) || (
+ zend_hash_str_find(Z_ARR(PG(http_globals)[TRACK_VARS_POST]), "PHP_DEBUGGER_SESSION_STOP", sizeof("PHP_DEBUGGER_SESSION_STOP") - 1) != NULL
))
&& !SG(headers_sent)
) {
diff --git a/src/inspect/inspect_commands.c b/src/inspect/inspect_commands.c
new file mode 100644
index 0000000..3d32bc2
--- /dev/null
+++ b/src/inspect/inspect_commands.c
@@ -0,0 +1,229 @@
+/*
+ +----------------------------------------------------------------------+
+ | Xdebug — Runtime Inspection API Commands (Stubs) |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2002-2025 Derick Rethans |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 1.01 of the Xdebug license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | https://xdebug.org/license.php |
+ | If you did not receive a copy of the Xdebug license and are unable |
+ | to obtain it through the world-wide-web, please send a note to |
+ | derick@xdebug.org so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ */
+
+#include "php_xdebug.h"
+
+#include "inspect_commands.h"
+#include "inspect_transport.h"
+
+#include "ext/json/php_json.h"
+#include "zend_smart_str.h"
+#include "lib/mm.h"
+
+#include
+
+ZEND_EXTERN_MODULE_GLOBALS(xdebug)
+
+/* ------------------------------------------------------------------ */
+/* Helper: build a JSON response string (caller must efree) */
+/* ------------------------------------------------------------------ */
+
+static char *make_json_response(zend_long id, zval *data)
+{
+ smart_str buf = {0};
+ zval response;
+
+ array_init(&response);
+
+ if (id > 0) {
+ add_assoc_long(&response, "id", id);
+ }
+
+ /* Merge data keys into response */
+ if (data && Z_TYPE_P(data) == IS_ARRAY) {
+ zend_string *key;
+ zval *val;
+
+ ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(data), key, val) {
+ if (key) {
+ Z_TRY_ADDREF_P(val);
+ zend_hash_update(Z_ARRVAL(response), key, val);
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+
+ php_json_encode(&buf, &response, PHP_JSON_UNESCAPED_SLASHES);
+ zval_ptr_dtor(&response);
+
+ /* Append newline for JSON lines framing */
+ smart_str_appendc(&buf, '\n');
+ smart_str_0(&buf);
+
+ char *result = estrdup(ZSTR_VAL(buf.s));
+ smart_str_free(&buf);
+ return result;
+}
+
+static char *make_ok_response(zend_long id, const char *message)
+{
+ zval data;
+ array_init(&data);
+ add_assoc_bool(&data, "ok", 1);
+ if (message) {
+ add_assoc_string(&data, "message", message);
+ }
+ char *result = make_json_response(id, &data);
+ zval_ptr_dtor(&data);
+ return result;
+}
+
+static char *make_error_response(zend_long id, const char *error)
+{
+ zval data;
+ array_init(&data);
+ add_assoc_bool(&data, "ok", 0);
+ add_assoc_string(&data, "error", error);
+ char *result = make_json_response(id, &data);
+ zval_ptr_dtor(&data);
+ return result;
+}
+
+static char *make_not_implemented_response(zend_long id, const char *cmd)
+{
+ char msg[256];
+ snprintf(msg, sizeof(msg), "command '%s' not yet implemented", cmd);
+ return make_error_response(id, msg);
+}
+
+/* ------------------------------------------------------------------ */
+/* Command dispatch table */
+/* ------------------------------------------------------------------ */
+
+typedef struct {
+ const char *name;
+ inspect_cmd_handler_fn handler;
+} inspect_cmd_entry;
+
+static inspect_cmd_entry inspect_command_table[] = {
+ { "status", inspect_cmd_status },
+ { "inspect", inspect_cmd_inspect },
+ { "snapshot", inspect_cmd_snapshot },
+ { "watch", inspect_cmd_watch },
+ { "trace", inspect_cmd_trace },
+ { "eval", inspect_cmd_eval },
+ { "profile.start", inspect_cmd_profile_start },
+ { "profile.stop", inspect_cmd_profile_stop },
+ { "profile.status", inspect_cmd_profile_status },
+ { "profile.dump", inspect_cmd_profile_dump },
+ { NULL, NULL }
+};
+
+char *inspect_dispatch_command(int client_fd, const char *cmd, zend_long request_id, zval *params)
+{
+ inspect_cmd_entry *entry;
+
+ if (!cmd || !*cmd) {
+ return make_error_response(request_id, "missing 'cmd' field");
+ }
+
+ for (entry = inspect_command_table; entry->name != NULL; entry++) {
+ if (strcmp(entry->name, cmd) == 0) {
+ return entry->handler(client_fd, request_id, params);
+ }
+ }
+
+ char msg[256];
+ snprintf(msg, sizeof(msg), "unknown command: '%s'", cmd);
+ return make_error_response(request_id, msg);
+}
+
+/* ------------------------------------------------------------------ */
+/* Command implementations */
+/* ------------------------------------------------------------------ */
+
+char *inspect_cmd_status(int client_fd, zend_long request_id, zval *params)
+{
+ zval data;
+ (void)client_fd;
+ (void)params;
+
+ array_init(&data);
+ add_assoc_bool(&data, "ok", 1);
+ add_assoc_string(&data, "extension", XDEBUG_NAME);
+ add_assoc_string(&data, "version", XDEBUG_VERSION);
+ add_assoc_string(&data, "php_version", PHP_VERSION);
+ add_assoc_string(&data, "sapi", (char *)sapi_module.name);
+ add_assoc_string(&data, "inspect_mode", xdebug_inspect_mode_name(XG(settings.library.inspect_mode)));
+ add_assoc_long(&data, "inspect_port", XG(settings.library.inspect_port));
+ add_assoc_string(&data, "inspect_socket", XG(settings.library.inspect_socket));
+
+ char *result = make_json_response(request_id, &data);
+ zval_ptr_dtor(&data);
+ return result;
+}
+
+char *inspect_cmd_inspect(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "inspect");
+}
+
+char *inspect_cmd_snapshot(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "snapshot");
+}
+
+char *inspect_cmd_watch(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "watch");
+}
+
+char *inspect_cmd_trace(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "trace");
+}
+
+char *inspect_cmd_eval(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "eval");
+}
+
+char *inspect_cmd_profile_start(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "profile.start");
+}
+
+char *inspect_cmd_profile_stop(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "profile.stop");
+}
+
+char *inspect_cmd_profile_status(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "profile.status");
+}
+
+char *inspect_cmd_profile_dump(int client_fd, zend_long request_id, zval *params)
+{
+ (void)client_fd;
+ (void)params;
+ return make_not_implemented_response(request_id, "profile.dump");
+}
diff --git a/src/inspect/inspect_commands.h b/src/inspect/inspect_commands.h
new file mode 100644
index 0000000..60c51fe
--- /dev/null
+++ b/src/inspect/inspect_commands.h
@@ -0,0 +1,49 @@
+/*
+ +----------------------------------------------------------------------+
+ | Xdebug — Runtime Inspection API Commands |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2002-2025 Derick Rethans |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 1.01 of the Xdebug license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | https://xdebug.org/license.php |
+ | If you did not receive a copy of the Xdebug license and are unable |
+ | to obtain it through the world-wide-web, please send a note to |
+ | derick@xdebug.org so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ */
+
+#ifndef __XDEBUG_INSPECT_COMMANDS_H__
+#define __XDEBUG_INSPECT_COMMANDS_H__
+
+#include "lib/php-header.h"
+
+/*
+ * Each command handler receives:
+ * client_fd — the socket fd of the requesting client
+ * request_id — the "id" field from the JSON request (0 if absent)
+ * params — the full parsed JSON request as a zval (IS_ARRAY)
+ *
+ * The handler must return a heap-allocated JSON string (the response line)
+ * which the caller will send and then free with efree().
+ * Return NULL to send no response.
+ */
+typedef char *(*inspect_cmd_handler_fn)(int client_fd, zend_long request_id, zval *params);
+
+/* Command dispatch — finds and calls the right handler */
+char *inspect_dispatch_command(int client_fd, const char *cmd, zend_long request_id, zval *params);
+
+/* Stub command handlers */
+char *inspect_cmd_status(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_inspect(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_snapshot(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_watch(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_trace(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_eval(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_profile_start(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_profile_stop(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_profile_status(int client_fd, zend_long request_id, zval *params);
+char *inspect_cmd_profile_dump(int client_fd, zend_long request_id, zval *params);
+
+#endif /* __XDEBUG_INSPECT_COMMANDS_H__ */
diff --git a/src/inspect/inspect_transport.c b/src/inspect/inspect_transport.c
new file mode 100644
index 0000000..b419884
--- /dev/null
+++ b/src/inspect/inspect_transport.c
@@ -0,0 +1,728 @@
+/*
+ +----------------------------------------------------------------------+
+ | Xdebug — Runtime Inspection API Transport |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2002-2025 Derick Rethans |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 1.01 of the Xdebug license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | https://xdebug.org/license.php |
+ | If you did not receive a copy of the Xdebug license and are unable |
+ | to obtain it through the world-wide-web, please send a note to |
+ | derick@xdebug.org so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ */
+
+#include "php_xdebug.h"
+
+#include
+#include
+#include
+#include
+
+#ifndef PHP_WIN32
+# if HAVE_POLL_H
+# include
+# elif HAVE_SYS_POLL_H
+# include
+# endif
+# include
+# include
+# include
+# include
+# include
+# include
+#else
+# include
+# include
+# define poll WSAPoll
+#endif
+
+#include "ext/json/php_json.h"
+
+#include "inspect_transport.h"
+#include "inspect_commands.h"
+#include "debugger/com.h"
+#include "lib/log.h"
+#include "lib/mm.h"
+
+ZEND_EXTERN_MODULE_GLOBALS(xdebug)
+
+/* ------------------------------------------------------------------ */
+/* Log channel for inspection subsystem */
+/* ------------------------------------------------------------------ */
+#define XLOG_CHAN_INSPECT 9
+
+/* ------------------------------------------------------------------ */
+/* Helper: send data to a socket fd, ignoring return value warnings */
+/* ------------------------------------------------------------------ */
+static void inspect_send_raw(int fd, const char *data, size_t len)
+{
+ ssize_t ret;
+ ret = SSENDL(fd, data, len);
+ (void)ret;
+}
+
+/* ------------------------------------------------------------------ */
+/* Per-client state */
+/* ------------------------------------------------------------------ */
+
+typedef struct {
+ int fd;
+ char read_buf[XDEBUG_INSPECT_READ_BUFSIZE];
+ int read_pos; /* bytes currently in read_buf */
+} inspect_client;
+
+/* ------------------------------------------------------------------ */
+/* Module-level state (true globals — persist across requests) */
+/* ------------------------------------------------------------------ */
+
+static int inspect_listen_fd = -1;
+static inspect_client inspect_clients[XDEBUG_INSPECT_MAX_CLIENTS];
+static int inspect_num_clients = 0;
+static int inspect_initialized = 0;
+
+/* ------------------------------------------------------------------ */
+/* Background thread state */
+/* ------------------------------------------------------------------ */
+static pthread_t inspect_thread;
+static int inspect_thread_active = 0;
+static int inspect_shutdown_pipe[2] = {-1, -1};
+
+/* Saved settings for thread-safe access (set once at init) */
+static int saved_inspect_port = 9007;
+static char saved_inspect_mode[32] = "off";
+static char saved_inspect_socket[256] = "";
+
+/* ------------------------------------------------------------------ */
+/* INI helpers */
+/* ------------------------------------------------------------------ */
+
+int xdebug_inspect_parse_mode(const char *value)
+{
+ if (!value || strcmp(value, "off") == 0 || strcmp(value, "0") == 0) {
+ return XDEBUG_INSPECT_OFF;
+ }
+ if (strcmp(value, "on") == 0 || strcmp(value, "1") == 0) {
+ return XDEBUG_INSPECT_ON;
+ }
+ if (strcmp(value, "auto") == 0) {
+ return XDEBUG_INSPECT_AUTO;
+ }
+ if (strcmp(value, "trigger") == 0) {
+ return XDEBUG_INSPECT_TRIGGER;
+ }
+ return XDEBUG_INSPECT_OFF;
+}
+
+const char *xdebug_inspect_mode_name(int mode)
+{
+ switch (mode) {
+ case XDEBUG_INSPECT_ON: return "on";
+ case XDEBUG_INSPECT_AUTO: return "auto";
+ case XDEBUG_INSPECT_TRIGGER: return "trigger";
+ default: return "off";
+ }
+}
+
+/* ------------------------------------------------------------------ */
+/* Socket helpers */
+/* ------------------------------------------------------------------ */
+
+static int set_nonblocking(int fd)
+{
+#ifndef PHP_WIN32
+ int flags = fcntl(fd, F_GETFL, 0);
+ if (flags < 0) return -1;
+ return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+#else
+ u_long mode = 1;
+ return ioctlsocket(fd, FIONBIO, &mode);
+#endif
+}
+
+static int set_cloexec(int fd)
+{
+#ifndef PHP_WIN32
+ return fcntl(fd, F_SETFD, FD_CLOEXEC);
+#else
+ (void)fd;
+ return 0;
+#endif
+}
+
+static void close_client(int idx)
+{
+ if (idx < 0 || idx >= inspect_num_clients) return;
+ if (inspect_clients[idx].fd >= 0) {
+ close(inspect_clients[idx].fd);
+ }
+ /* Shift remaining clients down */
+ for (int i = idx; i < inspect_num_clients - 1; i++) {
+ inspect_clients[i] = inspect_clients[i + 1];
+ }
+ inspect_num_clients--;
+}
+
+/* ------------------------------------------------------------------ */
+/* Create listening socket (TCP or Unix) */
+/* ------------------------------------------------------------------ */
+
+static int create_tcp_server(int port)
+{
+ int sockfd;
+ struct sockaddr_in addr;
+ int optval = 1;
+
+ sockfd = socket(AF_INET, SOCK_STREAM, 0);
+ if (sockfd < 0) {
+ return -1;
+ }
+
+ setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval));
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ addr.sin_port = htons((unsigned short)port);
+
+ if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ close(sockfd);
+ return -1;
+ }
+
+ if (listen(sockfd, 5) < 0) {
+ close(sockfd);
+ return -1;
+ }
+
+ set_nonblocking(sockfd);
+ set_cloexec(sockfd);
+
+ return sockfd;
+}
+
+#ifndef PHP_WIN32
+static int create_unix_server(const char *path)
+{
+ int sockfd;
+ struct sockaddr_un addr;
+
+ if (!path || !*path) {
+ return -1;
+ }
+
+ sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sockfd < 0) {
+ return -1;
+ }
+
+ /* Remove stale socket file if it exists */
+ unlink(path);
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1);
+
+ if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ close(sockfd);
+ return -1;
+ }
+
+ if (listen(sockfd, 5) < 0) {
+ close(sockfd);
+ return -1;
+ }
+
+ set_nonblocking(sockfd);
+ set_cloexec(sockfd);
+
+ return sockfd;
+}
+#endif
+
+/* ------------------------------------------------------------------ */
+/* Accept new connections (non-blocking) */
+/* ------------------------------------------------------------------ */
+
+static void accept_new_connections(void)
+{
+ struct sockaddr_storage client_addr;
+ socklen_t addr_len;
+ int client_fd;
+
+ if (inspect_listen_fd < 0) return;
+
+ /* Accept as many pending connections as we can */
+ while (inspect_num_clients < XDEBUG_INSPECT_MAX_CLIENTS) {
+ addr_len = sizeof(client_addr);
+ client_fd = accept(inspect_listen_fd, (struct sockaddr *)&client_addr, &addr_len);
+
+ if (client_fd < 0) {
+ /* No more pending connections (EAGAIN/EWOULDBLOCK) or error */
+ break;
+ }
+
+ set_nonblocking(client_fd);
+ set_cloexec(client_fd);
+
+ inspect_clients[inspect_num_clients].fd = client_fd;
+ inspect_clients[inspect_num_clients].read_pos = 0;
+ inspect_num_clients++;
+ }
+}
+
+/* ------------------------------------------------------------------ */
+/* Thread-safe JSON helpers (pure C, no PHP allocator/functions) */
+/* ------------------------------------------------------------------ */
+
+static long thread_json_extract_id(const char *json)
+{
+ const char *p = strstr(json, "\"id\"");
+ if (!p) return 0;
+ p += 4;
+ while (*p && (*p == ' ' || *p == '\t' || *p == ':')) p++;
+ return strtol(p, NULL, 10);
+}
+
+static int thread_json_extract_cmd(const char *json, char *out, int maxlen)
+{
+ const char *p = strstr(json, "\"cmd\"");
+ if (!p) return 0;
+ p += 5;
+ while (*p && (*p == ' ' || *p == '\t' || *p == ':')) p++;
+ if (*p != '"') return 0;
+ p++;
+ int i = 0;
+ while (*p && *p != '"' && i < maxlen - 1) {
+ if (*p == '\\' && *(p + 1)) {
+ p++; /* skip escape char */
+ }
+ out[i++] = *p++;
+ }
+ out[i] = '\0';
+ return i > 0;
+}
+
+static void thread_send(int fd, const char *buf, int len)
+{
+ int sent = 0;
+ while (sent < len) {
+ int n = send(fd, buf + sent, len - sent, MSG_NOSIGNAL);
+ if (n <= 0) break;
+ sent += n;
+ }
+}
+
+/* Thread-safe command dispatch — builds response with snprintf */
+static void thread_dispatch(int fd, const char *line)
+{
+ char cmd[64] = {0};
+ long id = thread_json_extract_id(line);
+ char buf[4096];
+ int len;
+
+ if (!thread_json_extract_cmd(line, cmd, sizeof(cmd))) {
+ len = snprintf(buf, sizeof(buf),
+ "{\"id\":%ld,\"ok\":false,\"error\":\"missing 'cmd' field\"}\n", id);
+ } else if (strcmp(cmd, "status") == 0) {
+ len = snprintf(buf, sizeof(buf),
+ "{\"id\":%ld,\"ok\":true,\"extension\":\"%s\","
+ "\"version\":\"%s\","
+ "\"php_version\":\"%s\","
+ "\"sapi\":\"%s\","
+ "\"inspect_mode\":\"%s\","
+ "\"inspect_port\":%d,"
+ "\"inspect_socket\":\"%s\"}\n",
+ id, XDEBUG_NAME, XDEBUG_VERSION, PHP_VERSION,
+ sapi_module.name, saved_inspect_mode,
+ saved_inspect_port, saved_inspect_socket);
+ } else {
+ len = snprintf(buf, sizeof(buf),
+ "{\"id\":%ld,\"ok\":false,\"error\":\"command '%s' not yet implemented\"}\n",
+ id, cmd);
+ }
+
+ if (len > 0 && len < (int)sizeof(buf)) {
+ thread_send(fd, buf, len);
+ }
+}
+
+/* Process buffered lines for a client (thread context) */
+static void thread_process_lines(int idx)
+{
+ inspect_client *c = &inspect_clients[idx];
+ char *start = c->read_buf;
+ int remaining = c->read_pos;
+
+ while (remaining > 0) {
+ char *nl = memchr(start, '\n', remaining);
+ if (!nl) break;
+
+ *nl = '\0';
+ int line_len = (int)(nl - start);
+
+ if (line_len > 0) {
+ thread_dispatch(c->fd, start);
+ }
+
+ start = nl + 1;
+ remaining = c->read_pos - (int)(start - c->read_buf);
+ }
+
+ if (start > c->read_buf && remaining > 0) {
+ memmove(c->read_buf, start, remaining);
+ }
+ c->read_pos = remaining;
+}
+
+/* ------------------------------------------------------------------ */
+/* Background thread main function */
+/* ------------------------------------------------------------------ */
+
+static void *inspect_thread_func(void *arg)
+{
+ (void)arg;
+ struct pollfd pfds[XDEBUG_INSPECT_MAX_CLIENTS + 2];
+
+ while (1) {
+ int n = 0;
+
+ /* Shutdown pipe (always slot 0) */
+ pfds[n].fd = inspect_shutdown_pipe[0];
+ pfds[n].events = POLLIN;
+ pfds[n].revents = 0;
+ n++;
+
+ /* Listen socket (slot 1) */
+ if (inspect_listen_fd >= 0) {
+ pfds[n].fd = inspect_listen_fd;
+ pfds[n].events = POLLIN;
+ pfds[n].revents = 0;
+ n++;
+ }
+
+ /* Client sockets */
+ int client_base = n;
+ for (int i = 0; i < inspect_num_clients; i++) {
+ pfds[n].fd = inspect_clients[i].fd;
+ pfds[n].events = POLLIN;
+ pfds[n].revents = 0;
+ n++;
+ }
+
+ int ready = poll(pfds, (nfds_t)n, 200);
+ if (ready < 0) {
+ if (errno == EINTR) continue;
+ break;
+ }
+ if (ready == 0) continue;
+
+ /* Check shutdown pipe */
+ if (pfds[0].revents & POLLIN) {
+ break;
+ }
+
+ /* Check listen socket for new connections */
+ if (inspect_listen_fd >= 0 && n > 1 && (pfds[1].revents & POLLIN)) {
+ accept_new_connections();
+ }
+
+ /* Process client data in reverse order (safe for close_client shifting) */
+ int num_at_poll = inspect_num_clients;
+ for (int i = num_at_poll - 1; i >= 0; i--) {
+ int pi = client_base + i;
+ if (pi >= n) continue;
+ if (!(pfds[pi].revents & (POLLIN | POLLHUP | POLLERR))) continue;
+
+ inspect_client *c = &inspect_clients[i];
+ int space = XDEBUG_INSPECT_READ_BUFSIZE - c->read_pos - 1;
+
+ if (space <= 0) {
+ close_client(i);
+ continue;
+ }
+
+ int bytes = recv(c->fd, c->read_buf + c->read_pos, space, 0);
+ if (bytes <= 0) {
+ close_client(i);
+ continue;
+ }
+
+ c->read_pos += bytes;
+ c->read_buf[c->read_pos] = '\0';
+ thread_process_lines(i);
+ }
+ }
+
+ return NULL;
+}
+
+/* ------------------------------------------------------------------ */
+/* Process incoming JSON lines from a single client (main thread) */
+/* ------------------------------------------------------------------ */
+
+static void process_client_lines(int idx)
+{
+ inspect_client *c = &inspect_clients[idx];
+ char *line_start;
+ char *newline;
+ int remaining;
+
+ line_start = c->read_buf;
+ remaining = c->read_pos;
+
+ while (remaining > 0) {
+ newline = memchr(line_start, '\n', remaining);
+ if (!newline) break;
+
+ /* Null-terminate the line */
+ *newline = '\0';
+ int line_len = (int)(newline - line_start);
+
+ /* Skip empty lines */
+ if (line_len > 0) {
+ /* Parse JSON */
+ zval parsed;
+ zend_string *json_str = zend_string_init(line_start, line_len, 0);
+
+ ZVAL_UNDEF(&parsed);
+ if (php_json_decode_ex(&parsed, ZSTR_VAL(json_str), ZSTR_LEN(json_str),
+ PHP_JSON_OBJECT_AS_ARRAY, 512) != SUCCESS
+ || Z_TYPE(parsed) != IS_ARRAY)
+ {
+ /* JSON parse error — send error response */
+ const char *err = "{\"ok\":false,\"error\":\"invalid JSON\"}\n";
+ inspect_send_raw(c->fd, err, strlen(err));
+ zval_ptr_dtor(&parsed);
+ zend_string_release(json_str);
+ } else {
+ /* Extract "cmd" and "id" fields */
+ zval *zcmd = zend_hash_str_find(Z_ARRVAL(parsed), "cmd", sizeof("cmd") - 1);
+ zval *zid = zend_hash_str_find(Z_ARRVAL(parsed), "id", sizeof("id") - 1);
+
+ const char *cmd = (zcmd && Z_TYPE_P(zcmd) == IS_STRING) ? Z_STRVAL_P(zcmd) : NULL;
+ zend_long req_id = 0;
+ if (zid) {
+ if (Z_TYPE_P(zid) == IS_LONG) {
+ req_id = Z_LVAL_P(zid);
+ } else if (Z_TYPE_P(zid) == IS_STRING) {
+ req_id = ZEND_STRTOL(Z_STRVAL_P(zid), NULL, 10);
+ }
+ }
+
+ /* Dispatch to command handler */
+ char *response = inspect_dispatch_command(c->fd, cmd, req_id, &parsed);
+ if (response) {
+ inspect_send_raw(c->fd, response, strlen(response));
+ efree(response);
+ }
+
+ zval_ptr_dtor(&parsed);
+ zend_string_release(json_str);
+ }
+ }
+
+ /* Advance past this line */
+ line_start = newline + 1;
+ remaining = c->read_pos - (int)(line_start - c->read_buf);
+ }
+
+ /* Move any partial (un-newlined) data to the start of the buffer */
+ if (line_start > c->read_buf && remaining > 0) {
+ memmove(c->read_buf, line_start, remaining);
+ }
+ c->read_pos = remaining;
+}
+
+/* ------------------------------------------------------------------ */
+/* Public API */
+/* ------------------------------------------------------------------ */
+
+int inspect_transport_init(void)
+{
+ int mode = XG(settings.library.inspect_mode);
+
+ if (mode == XDEBUG_INSPECT_OFF) {
+ return SUCCESS;
+ }
+
+ /* Already initialized (e.g. persistent module in FPM) */
+ if (inspect_initialized) {
+ return SUCCESS;
+ }
+
+ /* Initialize client slots */
+ memset(inspect_clients, 0, sizeof(inspect_clients));
+ for (int i = 0; i < XDEBUG_INSPECT_MAX_CLIENTS; i++) {
+ inspect_clients[i].fd = -1;
+ }
+ inspect_num_clients = 0;
+
+ /* Determine transport: Unix socket has priority */
+ const char *socket_path = XG(settings.library.inspect_socket);
+ int port = (int)XG(settings.library.inspect_port);
+
+#ifndef PHP_WIN32
+ if (socket_path && *socket_path) {
+ inspect_listen_fd = create_unix_server(socket_path);
+ } else
+#endif
+ {
+ inspect_listen_fd = create_tcp_server(port);
+ }
+
+ if (inspect_listen_fd < 0) {
+ return FAILURE;
+ }
+
+ /* Save settings for thread-safe access */
+ saved_inspect_port = port;
+ strncpy(saved_inspect_mode, xdebug_inspect_mode_name(mode), sizeof(saved_inspect_mode) - 1);
+ saved_inspect_mode[sizeof(saved_inspect_mode) - 1] = '\0';
+ if (socket_path) {
+ strncpy(saved_inspect_socket, socket_path, sizeof(saved_inspect_socket) - 1);
+ saved_inspect_socket[sizeof(saved_inspect_socket) - 1] = '\0';
+ }
+
+ /* Create shutdown pipe for signaling the thread */
+ if (pipe(inspect_shutdown_pipe) == 0) {
+ set_nonblocking(inspect_shutdown_pipe[0]);
+ set_cloexec(inspect_shutdown_pipe[0]);
+ set_cloexec(inspect_shutdown_pipe[1]);
+
+ /* Start background thread */
+ if (pthread_create(&inspect_thread, NULL, inspect_thread_func, NULL) == 0) {
+ inspect_thread_active = 1;
+ }
+ }
+
+ inspect_initialized = 1;
+ return SUCCESS;
+}
+
+void inspect_transport_check(void)
+{
+ /* When thread is active, it handles accept */
+ if (inspect_thread_active) return;
+ if (!inspect_initialized || inspect_listen_fd < 0) return;
+
+ accept_new_connections();
+}
+
+void inspect_transport_process(void)
+{
+ /* When thread is active, it handles processing */
+ if (inspect_thread_active) return;
+
+ struct pollfd pfds[XDEBUG_INSPECT_MAX_CLIENTS];
+ nfds_t n;
+ int ready;
+
+ if (!inspect_initialized || inspect_num_clients == 0) return;
+
+ n = (nfds_t)inspect_num_clients;
+
+ for (nfds_t i = 0; i < n; i++) {
+ pfds[i].fd = inspect_clients[i].fd;
+ pfds[i].events = POLLIN;
+ pfds[i].revents = 0;
+ }
+
+ ready = poll(pfds, n, 0); /* non-blocking: timeout=0 */
+ if (ready <= 0) return;
+
+ /* Process clients in reverse order so close_client() index shifting is safe */
+ for (int i = (int)n - 1; i >= 0; i--) {
+ if (!(pfds[i].revents & (POLLIN | POLLHUP | POLLERR))) continue;
+
+ inspect_client *c = &inspect_clients[i];
+ int space = XDEBUG_INSPECT_READ_BUFSIZE - c->read_pos - 1;
+
+ if (space <= 0) {
+ close_client(i);
+ continue;
+ }
+
+ int bytes = SREAD(c->fd, c->read_buf + c->read_pos, space);
+
+ if (bytes <= 0) {
+ close_client(i);
+ continue;
+ }
+
+ c->read_pos += bytes;
+ c->read_buf[c->read_pos] = '\0';
+
+ process_client_lines(i);
+ }
+}
+
+int inspect_transport_send(int client_id, const char *json_line)
+{
+ if (client_id < 0 || client_id >= inspect_num_clients) return FAILURE;
+ if (!json_line) return FAILURE;
+
+ inspect_send_raw(inspect_clients[client_id].fd, json_line, strlen(json_line));
+ return SUCCESS;
+}
+
+int inspect_transport_broadcast(const char *json_line)
+{
+ if (!json_line || inspect_num_clients == 0) return FAILURE;
+
+ for (int i = 0; i < inspect_num_clients; i++) {
+ inspect_send_raw(inspect_clients[i].fd, json_line, strlen(json_line));
+ }
+ return SUCCESS;
+}
+
+void inspect_transport_shutdown(void)
+{
+ if (!inspect_initialized) return;
+
+ /* Signal the background thread to stop and wait for it */
+ if (inspect_thread_active) {
+ char c = 'x';
+ ssize_t w = write(inspect_shutdown_pipe[1], &c, 1);
+ (void)w;
+ pthread_join(inspect_thread, NULL);
+ inspect_thread_active = 0;
+ }
+
+ /* Close shutdown pipe */
+ if (inspect_shutdown_pipe[0] >= 0) {
+ close(inspect_shutdown_pipe[0]);
+ inspect_shutdown_pipe[0] = -1;
+ }
+ if (inspect_shutdown_pipe[1] >= 0) {
+ close(inspect_shutdown_pipe[1]);
+ inspect_shutdown_pipe[1] = -1;
+ }
+
+ /* Close all client connections */
+ for (int i = 0; i < inspect_num_clients; i++) {
+ if (inspect_clients[i].fd >= 0) {
+ close(inspect_clients[i].fd);
+ inspect_clients[i].fd = -1;
+ }
+ }
+ inspect_num_clients = 0;
+
+ /* Close listening socket */
+ if (inspect_listen_fd >= 0) {
+ close(inspect_listen_fd);
+
+ /* Remove Unix socket file if applicable */
+#ifndef PHP_WIN32
+ if (saved_inspect_socket[0]) {
+ unlink(saved_inspect_socket);
+ }
+#endif
+
+ inspect_listen_fd = -1;
+ }
+
+ inspect_initialized = 0;
+}
diff --git a/src/inspect/inspect_transport.h b/src/inspect/inspect_transport.h
new file mode 100644
index 0000000..3514984
--- /dev/null
+++ b/src/inspect/inspect_transport.h
@@ -0,0 +1,45 @@
+/*
+ +----------------------------------------------------------------------+
+ | Xdebug — Runtime Inspection API Transport |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 2002-2025 Derick Rethans |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 1.01 of the Xdebug license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | https://xdebug.org/license.php |
+ | If you did not receive a copy of the Xdebug license and are unable |
+ | to obtain it through the world-wide-web, please send a note to |
+ | derick@xdebug.org so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ */
+
+#ifndef __XDEBUG_INSPECT_TRANSPORT_H__
+#define __XDEBUG_INSPECT_TRANSPORT_H__
+
+#include "lib/php-header.h"
+
+/* Inspection mode constants */
+#define XDEBUG_INSPECT_OFF 0
+#define XDEBUG_INSPECT_ON 1
+#define XDEBUG_INSPECT_AUTO 2
+#define XDEBUG_INSPECT_TRIGGER 3
+
+/* Transport configuration defaults */
+#define XDEBUG_INSPECT_PORT_DEFAULT 9007
+#define XDEBUG_INSPECT_MAX_CLIENTS 16
+#define XDEBUG_INSPECT_READ_BUFSIZE 65536 /* 64KB */
+
+/* Lifecycle functions — called from xdebug.c */
+int inspect_transport_init(void); /* MINIT: create listening socket */
+void inspect_transport_check(void); /* RINIT: accept new connections */
+void inspect_transport_process(void); /* periodic: read/dispatch messages */
+int inspect_transport_send(int client_id, const char *json_line);
+int inspect_transport_broadcast(const char *json_line);
+void inspect_transport_shutdown(void); /* MSHUTDOWN: close everything */
+
+/* INI helpers */
+int xdebug_inspect_parse_mode(const char *value);
+const char *xdebug_inspect_mode_name(int mode);
+
+#endif /* __XDEBUG_INSPECT_TRANSPORT_H__ */
diff --git a/src/lib/lib.c b/src/lib/lib.c
index 5191453..a9b3508 100644
--- a/src/lib/lib.c
+++ b/src/lib/lib.c
@@ -187,7 +187,10 @@ int xdebug_lib_set_mode(const char *mode)
char *config = getenv("XDEBUG_MODE");
int result = 0;
- /* XDEBUG_MODE environment variable */
+ /* XDEBUG_MODE / PHP_DEBUGGER_MODE environment variable */
+ if (!config || !strlen(config)) {
+ config = getenv("PHP_DEBUGGER_MODE");
+ }
if (config && strlen(config)) {
result = xdebug_lib_set_mode_from_setting(config);
@@ -469,6 +472,14 @@ static int trigger_enabled(int for_mode, char **found_trigger_value)
/* First we check for the generic 'XDEBUG_TRIGGER' option */
trigger_value = xdebug_lib_find_in_globals(trigger_name, &found_in_global);
+ /* If not found, try the PHP_DEBUGGER_TRIGGER alias */
+ if (!trigger_value) {
+ trigger_value = xdebug_lib_find_in_globals("PHP_DEBUGGER_TRIGGER", &found_in_global);
+ if (trigger_value) {
+ trigger_name = "PHP_DEBUGGER_TRIGGER";
+ }
+ }
+
/* If not found, we fall back to the per-mode name for backwards compatibility reasons */
if (!trigger_value) {
if (XDEBUG_MODE_IS(XDEBUG_MODE_STEP_DEBUG) && (for_mode == XDEBUG_MODE_STEP_DEBUG)) {
@@ -479,6 +490,12 @@ static int trigger_enabled(int for_mode, char **found_trigger_value)
xdebug_log(XLOG_CHAN_CONFIG, XLOG_INFO, "Trigger value for 'XDEBUG_TRIGGER' not found, falling back to '%s'", trigger_name);
trigger_value = xdebug_lib_find_in_globals(trigger_name, &found_in_global);
}
+
+ /* Also try PHP_DEBUGGER_SESSION alias */
+ if (!trigger_value && XDEBUG_MODE_IS(XDEBUG_MODE_STEP_DEBUG) && (for_mode == XDEBUG_MODE_STEP_DEBUG)) {
+ trigger_name = "PHP_DEBUGGER_SESSION";
+ trigger_value = xdebug_lib_find_in_globals(trigger_name, &found_in_global);
+ }
}
if (!trigger_value) {
diff --git a/src/lib/lib.h b/src/lib/lib.h
index 962a70a..03e6374 100644
--- a/src/lib/lib.h
+++ b/src/lib/lib.h
@@ -222,6 +222,11 @@ typedef struct _xdebug_library_settings_t {
/* Logging settings */
char *log; /* Filename to log protocol communication to */
zend_long log_level; /* Log level XDEBUG_LOG_{ERR,WARN,INFO,DEBUG} */
+
+ /* Inspection API settings */
+ zend_long inspect_mode; /* XDEBUG_INSPECT_OFF|ON|AUTO|TRIGGER */
+ zend_long inspect_port; /* TCP port, default 9007 */
+ char *inspect_socket; /* Unix socket path (empty = use TCP) */
} xdebug_library_settings_t;
void xdebug_init_library_globals(xdebug_library_globals_t *xg);
diff --git a/src/lib/log.c b/src/lib/log.c
index 1c7d731..dceab35 100644
--- a/src/lib/log.c
+++ b/src/lib/log.c
@@ -280,6 +280,7 @@ void xdebug_print_info(void)
print_logo();
php_info_print_table_row(2, "Version", XDEBUG_VERSION);
+ php_info_print_table_row(2, "Based on", "Xdebug by Derick Rethans");
if (!sapi_module.phpinfo_as_text) {
xdebug_info_printf("