Documentation - all settings
This section describes all available configuration settings available in Xdebug.
Unless specifically mentioned, each setting can be set in
php.ini
, files like 99-xdebug.ini
, but also in
Apache's .htaccess
and PHP-FPM's .user.ini
files.
XDEBUG_CONFIG environment variable #
A select set of settings can be set through an XDEBUG_CONFIG
environment variable. In this situation, the xdebug.
part should
be dropped from the setting name. An example of this is:
export XDEBUG_CONFIG="client_host=192.168.42.34 log=/tmp/xdebug.log"
The documentation for each setting below will indicate if it can be set through
XDEBUG_CONFIG
.
Some web servers have a configuration option to
prevent environment variables from being propagated to PHP and Xdebug.
For example, PHP-FPM has a clear_env
configuration setting that is on
by default, which you will
need to turn off
if you want to use XDEBUG_CONFIG
.
Make sure that your web server does not clean the environment, or specifically
allows the XDEBUG_CONFIG
environment variable to be passed on.
integer xdebug.cli_color = 0 #
If this setting is 1, Xdebug will color var_dumps and stack traces output when in CLI mode and when the output is a tty. On Windows, the ANSICON tool needs to be installed.
If the setting is 2, then Xdebug will always color var_dumps and stack trace, no matter whether it's connected to a tty or whether ANSICON is installed. In this case, you might end up seeing escape codes.
See this article for some more information.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
string xdebug.client_discovery_header = "HTTP_X_FORWARDED_FOR,REMOTE_ADDR" #
If xdebug.client_discovery_header is configured to be a non-empty string, then the
value is used as key in the $_SERVER
superglobal array to determine
which header to use to find the IP address or hostname to use for 'connecting
back to'. This setting is only used in combination with
xdebug.discover_client_host and is otherwise ignored.
For example, if xdebug.client_discovery_header is set to
HTTP_FORWARD_HOST
, then Xdebug will check
$_SERVER['HTTP_FORWARD_HOST']
to obtain the IP address to use for
'connecting back'.
It is possible to configure multiple fallbacks by using a comma separated
list of values. For example if you want to use HTTP_FORWARD_HOST
first, and then also want to check REMOTE_ADDR
, then you set
xdebug.client_discovery_header to
HTTP_FORWARD_HOST,REMOTE_ADDR
.
PHP automatically prepends HTTP_
, and converts
-
to _
, for received HTTP header names. The
THIS-IS-MY-HOST
HTTP header is converted into
$_SERVER['HTTP_THIS_IS_MY_HOST']
. Therefore, the
xdebug.client_discovery_header needs to be set to
HTTP_THIS_IS_MY_HOST
to match this.
If you have logging enabled, and set the xdebug.log_level setting to
10
, then Xdebug will list every header, the header value, and the
used header (if any) when attempting to find the IP address to connect back
to.
Xdebug 3.2 and later no longer fall back to the
$_SERVER['HTTP_X_FORWARDED_FOR']
and
$_SERVER['REMOTE_ADDR']
header values by default. If you want
these headers to be used as well, you specifically need to add these to the
list of headers, by setting xdebug.client_discovery_header to
YOUR_OWN_HEADER,HTTP_X_FORWARDED_FOR,REMOTE_ADDR
.
string xdebug.client_host = localhost #
Configures the IP address or hostname where Xdebug will attempt to connect to when initiating a debugging connection. This address should be the address of the machine where your IDE or debugging client is listening for incoming debugging connections.
On non-Windows platforms, it is also possible to configure a Unix domain socket which is supported by
only a select view debugging clients. In that case, instead of the hostname or IP address, use
unix:///path/to/sock
.
If xdebug.discover_client_host is enabled then Xdebug will only use the value of this setting in case Xdebug can not connect to an IDE using the information it obtained from HTTP headers. In that case, the value of this setting acts as a fallback only.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
integer xdebug.client_port = 9003 #
The port to which Xdebug tries to connect on the remote host. Port
9003
is the default for both Xdebug and the Command Line Debug Client.
As many clients use this port number, it is best to leave this setting
unchanged.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
string xdebug.cloud_id = #
With this setting you configure Xdebug for use with Xdebug Cloud. It needs to match one of the tokens from your profile page.
Your IDE needs to be configured with the same token for Xdebug and your IDE to communicate through Xdebug Cloud.
In PhpStorm you can find this setting under:
File | Settings | PHP | Debug | Xdebug Cloud
for Windows and Linux
PhpStorm | Preferences | PHP | Debug | Xdebug Cloud
for macOS
boolean xdebug.collect_assignments = false #
This setting, defaulting to 0, controls whether Xdebug should add
variable assignments to function traces. Assign-by-var (=&
)
assignments are included too.
boolean xdebug.collect_params = true #
Introduced in Xdebug >= 3.3
If enabled (default), files created with the Function Trace feature will include all arguments to functions and methods.
When disabled, the argument to each function and method will not be present in the trace files.
boolean xdebug.collect_return = false #
This setting, defaulting to 0, controls whether Xdebug should write the return value of function calls to the trace files.
integer xdebug.connect_timeout_ms = 200 #
The amount of time in milliseconds that Xdebug will wait for on an IDE to acknowledge an incoming debugging connection. The default value of 200 ms should in most cases be enough. In case you often get dropped debugging requests, perhaps because you have a high latency network, or a development box far away from your IDE, or have a slow firewall, then you can should increase this value.
Please note that increasing this value might mean that your requests seem to 'hang' in case Xdebug tries to establish a connection, but your IDE is not listening.
boolean xdebug.discover_client_host = false #
If enabled, Xdebug will first try to connect to the client that made the
HTTP request. It checks the $_SERVER['HTTP_X_FORWARDED_FOR']
and
$_SERVER['REMOTE_ADDR']
variables to find out which hostname or IP
address to use.
If xdebug.client_discovery_header is configured, then the $_SERVER
variable with that configured name will be checked instead of the default variables.
If Xdebug can not connect to a debugging client as found in one of the HTTP headers, it will fall back to the hostname or IP address as configured by the xdebug.client_host setting.
This setting does not apply for debugging through the CLI, as the
$_SERVER
header variables are not available there.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
Please note that there is no filter available, and anybody who can connect to the webserver will then be able to start a debugging session, even if their address does not match xdebug.client_host.
string xdebug.dump.* = Empty #
* can be any of COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION. These seven settings control which data from the superglobals is shown when an error situation occurs.
Each of those php.ini setting can consist of a comma separated list of
variables from this superglobal to dump, or *
for all of them.
Make sure you do not add spaces in this setting.
In order to dump the REMOTE_ADDR and the REQUEST_METHOD when an error occurs, and all GET parameters, add these settings:
xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD xdebug.dump.GET = *
boolean xdebug.dump_globals = true #
When this setting is set to true
, Xdebug adds the values
of the super globals as configured through the xdebug.dump.* to on-screen stack
traces and the error log (if enabled).
boolean xdebug.dump_once = true #
Controls whether the values of the superglobals should be dumped on all error situations (set to 0) or only on the first (set to 1).
boolean xdebug.dump_undefined = false #
If you want to dump undefined values from the superglobals you should set this setting to 1, otherwise leave it set to 0.
string xdebug.file_link_format = #
This setting determines the format of the links that are made in the display of stack traces where file names are used. This allows IDEs to set up a link-protocol that makes it possible to go directly to a line and file by clicking on the filenames that Xdebug shows in stack traces. An example format might look like:
myide://%f@%l
The possible format specifiers are:
Specifier | Meaning |
---|---|
%f | the filename |
%l | the line number |
For various IDEs/OSses there are some instructions listed on how to make this work:
PhpStorm
In the configuration file, add the following line, including the single quotes. This uses PhpStorm's REST API.
xdebug.file_link_format='javascript: var r = new XMLHttpRequest; r.open("get", "http://localhost:63342/api/file/%f:%l");r.send()'
Firefox on Linux
- Open about:config
- Add a new boolean setting "network.protocol-handler.expose.xdebug" and set it to "false"
- Add the following into a shell script
~/bin/ff-xdebug.sh
:#! /bin/sh f=`echo $1 | cut -d @ -f 1 | sed 's/xdebug:\/\///'` l=`echo $1 | cut -d @ -f 2`
Add to that one of (depending whether you have komodo, gvim or netbeans):komodo $f -l $l
gvim --remote-tab +$l $f
netbeans "$f:$l"
- Make the script executable with
chmod +x ~/bin/ff-xdebug.sh
- Set the xdebug.file_link_format setting to
xdebug://%f@%l
Windows and Netbeans
- Create the file
netbeans.bat
and save it in your path (C:\Windows
will work):@echo off setlocal enableextensions enabledelayedexpansion set NETBEANS=%1 set FILE=%~2 set FILE=!FILE:%%5C=\! %NETBEANS% --nosplash --console suppress --open "%FILE:~19%" nircmd win activate process netbeans.exe
Note: Remove the last line if you don't have
nircmd
. - Save the following code as
netbeans_protocol.reg
:Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\netbeans] "URL Protocol"="" @="URL:Netbeans Protocol" [HKEY_CLASSES_ROOT\netbeans\DefaultIcon] @="\"C:\\Program Files\\NetBeans 7.1.1\\bin\\netbeans.exe,1\"" [HKEY_CLASSES_ROOT\netbeans\shell] [HKEY_CLASSES_ROOT\netbeans\shell\open] [HKEY_CLASSES_ROOT\netbeans\shell\open\command] @="\"C:\\Windows\\netbeans.bat\" \"C:\\Program Files\\NetBeans 7.1.1\\bin\\netbeans.exe\" \"%1\""
Note: Make sure to change the path to Netbeans (twice), as well as the
netbeans.bat
batch file if you saved it somewhere else thanC:\Windows\
. - Double click on the
netbeans_protocol.reg
file to import it into the registry. - Set the xdebug.file_link_format setting to
xdebug.file_link_format = "netbeans://open/?f=%f:%l"
string xdebug.filename_format = ...%s%n #
This setting determines the format with which Xdebug renders
filenames in HTML stack traces (default: ...%s%n
) and location
information through the overloaded xdebug_var_dump() (default:
%f
).
The possible format specifiers are listed in this table. The example output is
rendered according to the full path
/var/www/vendor/mail/transport/mta.php
.
Specifier | Meaning | Example Output |
---|---|---|
%a | Ancester: Two directory elements and filename | mail/transport/mta.php |
%f | Full path | /var/www/vendor/mail/transport/mta.php |
%n | Name: Only the file name | mta.php |
%p | Parent: One directory element and the filename | transport/mta.php |
%s | Directory separator | / on Linux, OSX and other Unix-like systems, \ on Windows |
integer xdebug.force_display_errors = 0 #
If this setting is set to 1
then errors will
always be displayed, no matter what the setting of PHP's display_errors
is.
integer xdebug.force_error_reporting = 0 #
This setting is a bitmask, like error_reporting. This bitmask will be logically ORed with the bitmask represented by error_reporting to dermine which errors should be displayed. This setting can only be made in php.ini and allows you to force certain errors from being shown no matter what an application does with ini_set().
string xdebug.gc_stats_output_name = gcstats.%p #
This setting determines the name of the file that is used to dump garbage collection statistics into. The setting specifies the format with format specifiers, very similar to sprintf() and strftime(). There are several format specifiers that can be used to format the file name.
See the xdebug.trace_output_name documentation for the supported specifiers.
integer xdebug.halt_level = 0 #
This setting allows you to configure a mask that determines whether, and which, notices and/or warnings get converted to errors. You can configure notices and warnings that are generated by PHP, and notices and warnings that you generate yourself (by means of trigger_error()). For example, to convert the warning of strlen() (without arguments) to an error, you would do:
ini_set('xdebug.halt_level', E_WARNING); strlen(); echo "Hi!\n";
Which will then result in the showing of the error message, and the abortion
of the script. echo "Hi!\n";
will not be executed.
The setting is a bit mask, so to convert all notices and warnings into errors for all applications, you can set this in php.ini:
xdebug.halt_level=E_WARNING|E_NOTICE|E_USER_WARNING|E_USER_NOTICE
The bitmask only supports the four level that are mentioned above.
string xdebug.idekey = *complex* #
Controls which IDE Key Xdebug should pass on to the debugging client or proxy. The IDE Key is only important for use with the DBGp Proxy Tool, although some IDEs are incorrectly picky as to what its value is.
The default is based on the DBGP_IDEKEY
environment setting. If
it is not present, the default falls back to an empty string.
If this setting is set to a non-empty string, it selects its value over
DBGP_IDEKEY
environment variable as default value.
The internal IDE Key also gets updated through debugging session management and overrides the value of this setting as is explained in the Step Debugging documentation.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
string xdebug.log = #
Configures Xdebug's log file.
Xdebug will log to this file all file creations issues, Step Debugging connection attempts, failures, and debug communication.
Enable this functionality by setting the value to a absolute path. Make sure
that the system user that PHP runs at (such as www-data
if you are
running with Apache) can create and write to the file.
The file is opened in append-mode, and will therefore not be overwritten by default. There is no concurrency protection available.
The log file will include any attempt that Xdebug makes to connect to an IDE:
[2693358] Log opened at 2020-09-02 07:19:09.616195 [2693358] [Step Debug] INFO: Connecting to configured address/port: localhost:9003. [2693358] [Step Debug] ERR: Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port). [2693358] [Profiler] ERR: File '/foo/cachegrind.out.2693358' could not be opened. [2693358] [Profiler] WARN: /foo: No such file or directory [2693358] [Tracing] ERR: File '/foo/trace.1485761369' could not be opened. [2693358] [Tracing] WARN: /foo: No such file or directory [2693358] Log closed at 2020-09-02 07:19:09.617510
It includes the opening time (2020-09-02 07:19:09.616195
), the
IP/Hostname and port Xdebug is trying to connect to
(localhost:9003
), and whether it succeeded (Connected to
client
). The number in brackets ([2693358]
) is the
Process ID.
It includes:
[2693358]
- process ID in brackets
2020-09-02 07:19:09.616195
- opening time
For Step Debugging:
INFO: Connecting to configured address/port: localhost:9003. ERR: Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
For Profiling:
ERR: File '/foo/cachegrind.out.2693358' could not be opened. WARN: /foo: No such file or directory
For Function Trace:
ERR: File '/foo/trace.1485761369' could not be opened. WARN: /foo: No such file or directory
All warnings and errors are described on the Description of errors page, with
detailed instructions on how to resolve the problem, if possible. All errors are always logged through
PHP's internal logging mechanism (configured with error_log
in php.ini
). All warnings and errors also show up in the
diagnostics log that you can view by calling xdebug_info().
Step Debugger Communication
The debugging log can also log the communication between Xdebug and an IDE.
This communication is in XML, and starts with the <init
XML
element:
<init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///home/httpd/www.xdebug.org/html/router.php" language="PHP" xdebug:language_version="7.4.11-dev" protocol_version="1.0" appid="2693358" idekey="XDEBUG_ECLIPSE"> <engine version="3.0.0-dev"><![CDATA[Xdebug]]></engine> <author><![CDATA[Derick Rethans]]></author> <url><![CDATA[https://xdebug.org]]></url> <copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright> </init>
The fileuri
attribute lists the entry point of your
application, which can be useful to compare to breakpoint_set
commands to see if path mappings are set-up correctly.
Beyond the <init
element, you will find the configuration of
features:
<- feature_set -i 4 -n extended_properties -v 1 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="4" feature="extended_properties" success="1"> </response>
<- step_into -i 9 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="9" status="break" reason="ok"> <xdebug:message filename="file:///home/httpd/www.xdebug.org/html/router.php" lineno="3"> </xdebug:message> </response>
You can read about DBGP - A common debugger protocol specification at its dedicated documation page.
The xdebug.log_level setting controls how much information is logged.
Many Linux distributions now use systemd, which
implements private tmp directories. This means that when PHP
is run through a web server or as PHP-FPM, the /tmp
directory is
prefixed with something akin to:
/tmp/systemd-private-ea3cfa882b4e478993e1994033fc5feb-apache.service-FfWZRg
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
integer xdebug.log_level = 7 #
Configures which logging messages should be added to the log file.
The log file is configured with the xdebug.log setting.
The following levels are supported:
Level | Name | Example |
---|---|---|
0 | Criticals | Errors in the configuration |
1 | Errors | Connection errors |
3 | Warnings | Connection warnings |
5 | Communication | Protocol messages |
7 | Information | Information while connecting |
10 | Debug | Breakpoint resolving information |
Criticals, errors, and warnings always show up in the diagnostics log that you can view by calling xdebug_info().
Criticals and errors are additionally logged through
PHP's internal logging mechanism (configured with error_log
in php.ini
).
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
integer xdebug.max_nesting_level = 512 #
Controls the protection mechanism for infinite recursion protection. The value of this setting is the maximum level of nested functions that are allowed before the script will be aborted.
When the maximum nesting level is reached, an "Error" exception is thrown.
Before Xdebug 3.3, the default value was 256
.
integer xdebug.max_stack_frames = -1 #
Controls how many stack frames are shown in stack traces, both on the command line during PHP error stack traces, as well as in the browser for HTML traces.
string xdebug.mode = develop #
This setting controls which Xdebug features are enabled.
This setting can only be set in php.ini
or
files like 99-xdebug.ini
that are read when a PHP process starts
(directly, or through php-fpm). You can not set this value in
.htaccess
and .user.ini
files, which are read
per-request, nor through php_admin_value
as used in Apache VHOSTs
and PHP-FPM pools.
The following values are accepted:
off
- Nothing is enabled. Xdebug does no work besides checking whether functionality is enabled. Use this setting if you want close to 0 overhead.
develop
- Enables Development Helpers including the overloaded var_dump().
coverage
- Enables Code Coverage Analysis to generate code coverage reports, mainly in combination with PHPUnit.
debug
- Enables Step Debugging. This can be used to step through your code while it is running, and analyse values of variables.
gcstats
- Enables Garbage Collection Statistics to collect statistics about PHP's Garbage Collection Mechanism.
profile
- Enables Profiling, with which you can analyse performance bottlenecks with tools like KCacheGrind.
trace
- Enables the Function Trace feature, which allows you record every function call, including arguments, variable assignment, and return value that is made during a request to a file.
You can enable multiple modes at the same time by comma separating their
identifiers as value to xdebug.mode: xdebug.mode=develop,trace
.
XDEBUG_MODE environment variable
You can also set Xdebug's mode by setting the XDEBUG_MODE
environment variable on the command-line; this will take precedence over the
xdebug.mode setting, but will not change the value of the xdebug.mode
setting.
Some web servers have a configuration option to
prevent environment variables from being propagated to PHP and Xdebug.
For example, PHP-FPM has a clear_env
configuration setting that is on
by default, which you will
need to turn off
if you want to use XDEBUG_MODE
.
Make sure that your web server does not clean the environment, or specifically
allows the XDEBUG_MODE
environment variable to be passed on.
string xdebug.output_dir = /tmp #
The directory where Xdebug will write tracing, profiling, and garbage collection statistics to. This directory needs to be writable for the system user with which PHP is running.
This setting can be changed in php.ini
, .htaccess
(and equivalent files), and within a PHP file with ini_set()
.
In some cases (when profiling, or when
xdebug.start_with_request=yes
with tracing), Xdebug
creates the file before the script runs. In that case, changes made through
ini_set()
will not be taken into account.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
integer xdebug.profiler_append = 0 #
When this setting is set to 1, profiler files will not be overwritten when a new request would map to the same file (depending on the xdebug.profiler_output_name setting. Instead the file will be appended to with the new profile.
string xdebug.profiler_output_name = cachegrind.out.%p #
This setting determines the name of the file that is used to dump traces into. The setting specifies the format with format specifiers, very similar to sprintf() and strftime(). There are several format specifiers that can be used to format the file name.
See the xdebug.trace_output_name documentation for the supported specifiers.
This setting can additionally be configured through the
XDEBUG_CONFIG
environment variable.
boolean xdebug.scream = false #
If this setting is 1, then Xdebug will disable the @ (shut-up) operator so that notices, warnings and errors are no longer hidden.
integer xdebug.show_error_trace = 0 #
When this setting is set to 1, Xdebug will show a stack trace whenever an Error is raised - even if this Error is actually caught.
integer xdebug.show_exception_trace = 0 #
When this setting is set to 1, Xdebug will show a stack trace whenever an Exception or Error is raised - even if this Exception or Error is actually caught.
Error 'exceptions' were introduced in PHP 7.
integer xdebug.show_local_vars = 0 #
When this setting is set to something != 0 Xdebug's generated stack dumps in error situations will also show all variables in the top-most scope. Beware that this might generate a lot of information, and is therefore turned off by default.
string xdebug.start_upon_error = default #
Step Debugging can be activated when a PHP Notice or Warning is emitted, or when a Throwable (Exception/Error) is thrown, depending on the value of this setting:
yes
-
Initialise a debugging session when a PHP Notice or Warning is emitted, or when a Throwable is thrown.
no
default
-
Do not start a debugging session upon an error situation.
This setting is independent of xdebug.start_with_request, and therefore it is
not necessary to set xdebug.start_with_request=trigger
.
string xdebug.start_with_request = default #
A Function Trace, Garbage Collection Statistics, Profiling, or Step Debugging can be activated at the start of a PHP request. Whether this happens depends on the value of this setting:
yes
-
The functionality starts when the PHP request starts, and before any PHP code is run.
For example xdebug.mode=
trace
and xdebug.start_with_request=yes
starts a Function Trace for the whole request. no
-
The functionality does not get activated when the request starts.
You can still start a Function Trace with xdebug_start_trace(), or Garbage Collection Statistics with xdebug_start_gcstats().
Step Debugging and Profiling will never activate with this value.
trigger
-
The functionality only gets activated when a specific trigger is present when the request starts.
The name of the trigger is
XDEBUG_TRIGGER
, and Xdebug checks for its presence in either$_ENV
(environment variable),$_GET
or$_POST
variable, or$_COOKIE
(HTTP cookie name).There is a legacy fallback to a functionality specific trigger name:
XDEBUG_PROFILE
(for Profiling),XDEBUG_TRACE
(for a Function Trace), andXDEBUG_SESSION
(for Step Debugging).There is another legacy trigger for Step Debugging only. If you set the
XDEBUG_CONFIG
environment variable to any value, then the step debugger will also get activated.Debug session management for Step Debugging is also available through
XDEBUG_SESSION_START
.With xdebug.trigger_value you can control which specific trigger value will activate the trigger. If xdebug.trigger_value is set to an empty string, any value will be accepted.
In this mode it is also possible to activate Step Debugging with xdebug_break().
default
-
The
default
value depends on xdebug.mode:- debug:
trigger
- gcstats:
no
- profile:
yes
- trace:
trigger
- debug:
integer xdebug.trace_format = 0 #
The format of the trace file.
Value | Description |
---|---|
0 | shows a human readable indented trace file with: time index, memory usage, memory delta, level, function name, function parameters, filename and line number. |
1 | writes a computer readable format which has two different records. There are different records for entering a stack frame, and leaving a stack frame. The table below lists the fields in each type of record. Fields are tab separated. |
2 | writes a trace formatted in (simple) HTML. |
Fields for the computerized format:
Record type | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 - ... |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Entry | level | function # | always '0' | time index | memory usage | function name | user-defined (1) or internal function (0) | name of the include or require file | filename | line number | no. of arguments | arguments (as many as specified in field 11) - tab separated |
Exit | level | function # | always '1' | time index | memory usage | empty | ||||||
Return | level | function # | always 'R' | empty | return value | empty |
See the introduction for Function Trace for a few examples.
integer xdebug.trace_options = 0 #
This settings accepts a bitfield to enable options:
- 1
- Trace file data will be appended to an already existing file with the same name, instead of it being overwritten.
- 2
- Switches the file format to a tab separated format. The format is described in the xdebug.trace_format setting as "format 1".
- 4
- Switches to a file format that shows data as an HTML table
- 8
- With this bit set,
.xt
is not added automatically to the end of trace file names.
To combine multiple flags, you can use bitwise-OR (|
).
xdebug.trace_options=2|8
enables both the tab separated format,
and stops the addition of .xt
to the end of the file name.
string xdebug.trace_output_name = trace.%c #
This setting determines the name of the file that is used to dump traces into. The setting specifies the format with format specifiers, very similar to sprintf() and strftime(). There are several format specifiers that can be used to format the file name. The '.xt' extension is always added automatically.
The possible format specifiers are:
Specifier | Meaning | Example Format | Example Filename |
---|---|---|---|
%c | crc32 of the current working directory | trace.%c | trace.1258863198.xt |
%p | pid | trace.%p | trace.5174.xt |
%r | random number | trace.%r | trace.072db0.xt |
%s | script name 2 | cachegrind.out.%s | cachegrind.out._home_httpd_html_test_xdebug_test_php |
%t | timestamp (seconds) | trace.%t | trace.1179434742.xt |
%u | timestamp (microseconds) | trace.%u | trace.1179434749_642382.xt |
%H | $_SERVER['HTTP_HOST'] | trace.%H | trace.kossu.xt |
%R | $_SERVER['REQUEST_URI'] | trace.%R | trace._test_xdebug_test_php_var=1_var2=2.xt |
%U | $_SERVER['UNIQUE_ID'] 3 | trace.%U | trace.TRX4n38AAAEAAB9gBFkAAAAB.xt |
%S | session_id (from $_COOKIE if set) | trace.%S | trace.c70c1ec2375af58f74b390bbdd2a679d.xt |
%% | literal % | trace.%% | trace.%%.xt |
2 This one is only available for trace file names since Xdebug 2.6.
3 New in version 2.2. This one is set by Apache's mod_unique_id module
string xdebug.trigger_value = "" #
This setting can be used when xdebug.start_with_request is set to
trigger
, which is the default for Step Debugging and Function Trace.
In trigger
mode, Xdebug will only start its
functionality when the XDEBUG_TRIGGER
is set in the environment,
or when the XDEBUG_TRIGGER
GET, POST, or COOKIE variable is
set.
The legacy names XDEBUG_SESSION
(for Step Debugging),
XDEBUG_PROFILE
(for Profiling), and XDEBUG_TRACE
(for Function Trace) can also be used instead of XDEBUG_TRIGGER
.
Normally, Xdebug does not look at which value is actually used. If this setting is set to a non-empty string, then Xdebug will only trigger if the value matches the value of this setting.
With the following settings:
xdebug.mode=profile xdebug.start_with_request=trigger xdebug.trigger_value=StartProfileForMe
Xdebug's profiler will only start when either the environment variable
XDEBUG_TRIGGER
is set to StartProfileForMe
, the GET
or POST variable XDEBUG_TRIGGER
is set to
StartProfileForMe
, or when the cookie XDEBUG_TRIGGER
has the value StartProfileForMe
.
From Xdebug 3.1, it is possible to configure multiple values by using a comma separated list. In that case, Xdebug will trigger if the supplied value matches any of the entries that are configured through this setting:
xdebug.trigger_value=StartDebuggerForMe,StartDebuggerForYou
See also:
- xdebug.start_with_request#trigger
- For how the triggering mechanism works, and which environment and server variables Xdebug acts on.
boolean xdebug.use_compression = true #
Introduced in Xdebug >= 3.1
If enabled, the Function Trace and Profiling features will create GZip compressed files as output. This reduces diskspace.
If GZip compression is not supported by Xdebug, because it was not compiled in, then Xdebug will add a warning to its log and xdebug_info() diagnostics section.
It is enabled by default if Xdebug has GZip support, and disable if Xdebug does not have GZip support.
The QCacheGrind tool that you can use to visualise profiling information
does not support reading GZip compressed profile files, whereas KCacheGrind and
PhpStorm do. If you are a QCacheGrind user, you should set
xdebug.use_compression to false
.
integer xdebug.var_display_max_children = 128 #
Controls the amount of array children and object's properties are shown when variables are displayed with either xdebug_var_dump(), xdebug.show_local_vars or when making a Function Trace.
To disable any limitation, use -1 as value.
This setting does not have any influence on the number of children that is send to the client through the Step Debugging feature.
integer xdebug.var_display_max_data = 512 #
Controls the maximum string length that is shown when variables are displayed with either xdebug_var_dump(), xdebug.show_local_vars or when making a Function Trace.
To disable any limitation, use -1 as value.
This setting does not have any influence on the number of children that is send to the client through the Step Debugging feature.
integer xdebug.var_display_max_depth = 3 #
Controls how many nested levels of array elements and object properties are when variables are displayed with either xdebug_var_dump(), xdebug.show_local_vars or when making a Function Trace.
The maximum value you can select is 1023. You can also use -1 as value to select this maximum number.
This setting does not have any influence on the number of children that is send to the client through the Step Debugging feature.
Setting the value to a high number could potentially result in PHP using up all the available memory, so use with caution.