!This program cannot be run in DOS mode.
qPKSpQr
qPKSrQs
qPKStQ|
qPKSuQz
qPRichp
`.rdata
@.data
.pdata
@.reloc
L$ SVWH
SUWAUH
^(H+^ H
@USVWAUAWH
Lcl$@I
HcT$DH
A_A]_^[]
@SATAUAVH
A^A]A\[
A^A]A\[
@SATAUAVH
A^A]A\[
|$ UATAUAVAWH
A_A^A]A\]
|$ AVH
@UVWAVH
@USAWH
|$ UATAUAVAWH
L;Chu4H
L$ HcC4H
A_A^A]A\]
@UWATAVAWH
0A_A^A\_]
0A_A^A\_]H
|$ AVH
t$ WATAUAVAWH
A_A^A]A\_
|$ AVH
@SUVAWH
(A_^][
(A_^][
(A_^][
G8L;F8u)H
|$@fff
UVWATAUAVAWH
A_A^A]A\_^]
@SUVWAUAVAWH
L9k t|L
pA_A^A]_^][
@VWATAUH
\$PIc]
(A]A\_^
|$ UATAUAVAWH
A_A^A]A\]
l$ VWATAUAVH
|$0;t$8r
A^A]A\_^
|$ AVH
u(I99tY
6I99t1
y au H
|$ AVH
UATAUAVAWH
A_A^A]A\]
UATAUAVAWH
A_A^A]A\]
WATAUAVAWH
A_A^A]A\_
|$ ATAVAWH
A_A^A\
WAVAWH
A_A^_
@SVWAVAWH
A_A^_^[
@SUVWATAVAWH
|$ qt5A
A_A^A\_^][
@USVWAVH
A^_^[]
t$ ATAVAWH
A_A^A\
<'w|<#
@SUVWAWH
@A__^][
@A__^][
UVWATAUAVAWH
A_A^A]A\_^]
WAVAWH
PA_A^_
UWAUAVAWI
D$d<%tM;
\$`fff
HcD$`H;
t6HcD$`H;
t8HcD$`H;
t/HcD$`H;
<"t4<&t
HcD$`H;
Hct$xH;
A_A^A]_]
L$(H;L$ w
WAVAWH
@A_A^_
WATAUAVAWH
A_A^A]A\_
USVWATAUAVH
tOHc}`I
PA^A]A\_^[]
SUVWATAVAWH
D$XH;D$Pw
`A_A^A\_^][
`A_A^A\_^][
L$ UVWH
@SUVWH
L$ VAWH
D$8H;D$0w
H SUWAVAWH
D$(H;D$ w
@A_A^_][
L$ UAVH
L$ USAWH
@SUVWATAUH
8A]A\_^][
@USAWH
VWATAVAWH
t$@H9o
A_A^A\_^
UVWATAUAVAWH
A_A^A]A\_^]
l$@Lci8L
|$ UATAUAVAWH
HcT$hH
A_A^A]A\]
|$ AVH
@SWAWH
</t-<\t)H
D$XIcC<M
D$4dll
D$0dpx.:
D$XLw&
FXIcC<M
UAVAWf;
A_A^A]A\_^[]
t$ AWH
WAVAWH
A_A^_
|$ AVH
@SUVWAVH
A^_^][
VWATAVAWH
A_A^A\_^
VATAVH
PA^A\^
|$ ATAVAWH
A_A^A\
VAVAWH
A_A^^
|$ AVH
@SVWAUAWH
A_A]_^[
|$ AVH
H3E H3E
phpdbg.path
phpdbg.eol
PHPDBG_VERSION
PHPDBG_FILE
PHPDBG_METHOD
PHPDBG_LINENO
PHPDBG_FUNC
PHPDBG_COLOR_PROMPT
PHPDBG_COLOR_NOTICE
PHPDBG_COLOR_ERROR
Failed to set execution context (%s), not a regular file or symlink
Failed to set execution context (%s) the file does not exist
phpdbg detected an incorrect color constant
functions
opcodes
%.*s::%.*s
Can not end an oplog without starting it
method
function
element
string
context
options
phpdbg_clear
phpdbg_break_next
phpdbg_break_file
phpdbg_break_method
phpdbg_break_function
phpdbg_exec
phpdbg_color
phpdbg_prompt
phpdbg_start_oplog
phpdbg_end_oplog
phpdbg_get_executable
phpdbg
API20151012,TS,VC14
msg="%s"
PHP_SELF
SCRIPT_NAME
SCRIPT_FILENAME
PATH_TRANSLATED
DOCUMENT_ROOT
php://stdin
php://stdout
php://stderr
STDOUT
STDERR
ini path override
define ini entry on command line
no php.ini
load zend_extension
no banner
disable quietness
boring colours
specify init
ignore init
opline log
generate ext_stmt opcodes
step-through-eval
script from stdin
sapi-name
xml output
show opcodes
version
white-bold
red-bold
path="%s"
html_errors=Off
register_argc_argv=On
implicit_flush=On
display_errors=Off
log_errors=On
max_execution_time=0
max_input_time=-1
error_log=
output_buffering=off
"&!%*+,-
Exporting %d breakpoints
count="%d"
exportbreakpoint
%sbreak "%s":%lu
%sbreak %s
%sbreak %s::%s
%sbreak %s::%s#%llu
%sbreak %s#%llu
%sbreak "%s":#%llu
%sbreak at %s if %s
%sbreak at %s::%s if %s
%sbreak at "%s":%lu if %s
%sbreak if %s
Cannot stat %s, it does not exist
type="nofile" add="fail" file="%s"
breakpoint
Cannot set breakpoint in %s, it is not a regular file
type="notregular" add="fail" file="%s"
Pending breakpoint #%d added at %s:%ld
add="success" id="%d" file="%s" line="%ld" pending="pending"
Breakpoint #%d added at %s:%ld
add="success" id="%d" file="%s" line="%ld"
Breakpoint at %s:%ld exists
type="exists" add="fail" file="%s" line="%ld"
Breakpoint #%d added at %s
add="success" id="%d" function="%s"
Breakpoint exists at %s
type="exists" add="fail" function="%s"
Breakpoint #%d added at %s::%s
add="success" id="%d" method="%s::%s"
Breakpoint exists at %s::%s
type="exists" add="fail" method="%s::%s"
Breakpoint #%d added at %#lx
add="success" id="%d" opline="%#lx"
Breakpoint exists at %#lx
type="exists" add="fail" opline="%#lx"
There are only %d oplines in function %s (breaking at opline %ld impossible)
type="maxoplines" add="fail" maxoplinenum="%d" function="%s" usedoplinenum="%ld"
There are only %d oplines in file %s (breaking at opline %ld impossible)
type="maxoplines" add="fail" maxoplinenum="%d" file="%s" usedoplinenum="%ld"
There are only %d oplines in method %s::%s (breaking at opline %ld impossible)
type="maxoplines" add="fail" maxoplinenum="%d" method="%s::%s" usedoplinenum="%ld"
Breakpoint #%d resolved at %s%s%s#%ld (opline %#lx)
add="success" id="%d" symbol="%s" num="%ld" opline="%#lx"
Method %s doesn't exist in class %s
type="nomethod" method="%s::%s"
%s is not a user defined function, no oplines exist
type="internalfunction" function="%s"
%s::%s is not a user defined method, no oplines exist
type="internalfunction" method="%s::%s"
Pending breakpoint #%d at %s::%s#%ld
pending="pending" id="%d" method="%::%s" num="%ld"
Breakpoint #%d added at %s::%s#%ld
id="%d" method="%::%s" num="%ld"
Breakpoint already exists for %s::%s#%ld
type="exists" method="%s" num="%ld"
Pending breakpoint #%d at %s#%ld
pending="pending" id="%d" function="%s" num="%ld"
Breakpoint #%d added at %s#%ld
id="%d" function="%s" num="%ld"
Breakpoint already exists for %s#%ld
type="exists" function="%s" num="%ld"
Pending breakpoint #%d at %s:%ld
pending="pending" id="%d" file="%s" num="%ld"
id="%d" file="%s" num="%ld"
Breakpoint already exists for %s:%ld
type="exists" file="%s" num="%d"
Breakpoint exists for %s
type="exists" opcode="%s"
id="%d" opcode="%s"
id="%d" opline="%#lx"
Breakpoint exists for opline %#lx
type="exists" opline="%#lx"
return
Conditional Breakpoint Code
Conditional breakpoint #%d added %s/%p
id="%d" expression="%s" ptr="%p"
Failed to compile code for expression %s
expression="%s"
compile
Conditional break %s exists
type="exists" expression="%s"
Conditional break %s exists at the specified location
type="exists" arg="%s"
Deleted breakpoint #%ld
deleted="success" id="%ld"
Failed to find breakpoint #%ld
type="nobreakpoint" deleted="fail" id="%ld"
Breakpoint #%d at %s:%ld, hits: %lu
id="%d" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in %s() at %s:%u, hits: %lu
id="%d" function="%s" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in %#lx at %s:%u, hits: %lu
id="%d" opline="%#lx" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in %s::%s()#%lu at %s:%u, hits: %lu
id="%d" method="%s::%s" num="%lu" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in %s()#%lu at %s:%u, hits: %lu
id="%d" num="%lu" function="%s" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in #%lu at %s:%u, hits: %lu
id="%d" num="%lu" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in %s at %s:%u, hits: %lu
id="%d" opcode="%s" file="%s" line="%ld" hits="%lu"
Breakpoint #%d in %s::%s() at %s:%u, hits: %lu
id="%d" method="%s::%s" file="%s" line="%ld" hits="%lu"
Conditional breakpoint #%d: at %s if %s at %s:%u, hits: %lu
id="%d" location="%s" eval="%s" file="%s" line="%ld" hits="%lu"
Conditional breakpoint #%d: on %s == true at %s:%u, hits: %lu
id="%d" eval="%s" file="%s" line="%ld" hits="%lu"
Unknown breakpoint at %s:%u
id="" file="%s" line="%ld" hits="%lu"
<breakpoints %r>
------------------------------------------------
Function Breakpoints:
[disabled]
id="%d" name="%s" disabled="%s"
Method Breakpoints:
%s::%s%s
id="%d" name="%s::%s" disabled="%s"
File Breakpoints:
%s:%lu%s
id="%d" name="%s" line="%lu" disabled="%s"
Pending File Breakpoints:
id="%d" name="%s" line="%lu" disabled="%s" pending="pending"
Opline Breakpoints:
(%s breakpoint)%s
id="%d" num="%#lx" type="%s" disabled="%s"
opline
%#lx%s
id="%d" num="%#lx" disabled="%s"
Method opline Breakpoints:
%s::%s opline %ld%s
id="%d" name="%s::%s" num="%ld" disabled="%s"
methodopline
Function opline Breakpoints:
%s opline %ld%s
id="%d" name="%s" num="%ld" disabled="%s"
functionopline
File opline Breakpoints:
fileopline
Conditional Breakpoints:
at %s if %s%s
id="%d" name="%s" eval="%s" disabled="%s"
evalfunction
at %s#%ld if %s%s
id="%d" name="%s" num="%ld" eval="%s" disabled="%s"
evalfunctionopline
at %s::%s if %s%s
id="%d" name="%s::%s" eval="%s" disabled="%s"
evalmethod
at %s::%s#%ld if %s%s
id="%d" name="%s::%s" num="%d" eval="%s" disabled="%s"
evalmethodopline
at %s:%lu if %s%s
id="%d" name="%s" line="%d" eval="%s" disabled="%s"
evalfile
at #%lx if %s%s
id="%d" opline="%#lx" eval="%s" disabled="%s"
evalopline
Invalid parameter type for conditional breakpoint
type="invalidparameter"
if %s%s
id="%d" eval="%s" disabled="%s"
Opcode Breakpoints:
opcode
</breakpoints>
specify breakpoint by location and condition
delete breakpoint by identifier number
address
numeric
function opline
method opline
file or file opline
unknown
%s::%s
%s:%lu#%lu
%s:%lu
%s#%lu
%s::%s#%lu
%s STR_PARAM(%s=%zu)
%s ADDR_PARAM(%llu)
%s NUMERIC_FILE_PARAM(%s:#%lu)
%s FILE_PARAM(%s:%lu)
%s METHOD_PARAM(%s::%s)
%s NUMERIC_METHOD_PARAM(%s::%s)
%s NUMERIC_FUNCTION_PARAM(%s::%ld)
%s NUMERIC_PARAM(%ld)
%s COND_PARAM(%s=%zu)
%s OP_PARAM(%s=%zu)
The command "%s" expected no arguments
type="toomanyargs" command="%s" expected="0"
command
raw input
The command "%s" expected %s and got nothing at parameter %lu
type="noarg" command="%s" expected="%s" num="%lu"
The command "%s" expected %s and got %s at parameter %lu
type="wrongarg" command="%s" expected="%s" got="%s" num="%lu"
number
file:line
condition
boolean
The command "%s" expected at least %lu arguments (%s) and received %lu
type="toofewargs" command="%s" expected="%d" argtypes="%s" got="%d"
The command "%s %s" could not be found
type="notfound" command="%s" subcommand="%s"
The command "%s" could not be found
type="notfound" command="%s"
The command "%s" is ambigious, matching %lu commands (%s)
type="ambiguous" command="%s" matches="%lu" matched="%s"
run command is disallowed during hard interrupt
command="run"
signalsegv
sh command is disallowed during hard interrupt
command="sh"
%s command is disallowed during hard interrupt
command="%s"
The first parameter makes no sense !
type="invalidcommand"
The passed argument was not a stack !
type="nostack"
The stack contains nothing !
type="emptystack"
prompt
(type y or n):
Please enter either y (yes) or n (no):
Already in frame #%d
id="%d"
Couldn't switch frames, invalid data source
No frame #%d
type="maxnum" id="%d"
Switched to frame #%d
object
symbol="%s%s%s"
%s%s%s(
<arg %r
variadic
variadic="%s" name="%s">
</arg>
</frame>
Invalid backtrace size %d
type="minnum"
backtrace
Couldn't fetch backtrace, invalid data source
<backtrace %r>
frame #%d:
<frame %r id="%d" file="%s" line="%lld"
at %s:%ld
<frame %r id="%d" internal="internal"
(internal function)
frame #%d: {main} at %s:%ld
id="%d" symbol="{main}" file="%s" line="%d"
</backtrace>
aliases
show alias list
command line options
overview
help overview
phpdbginit
phpdbginit file format
syntax
syntax overview
<help %r msg="%s" />
Output overrun of %lu bytes
overrun="%lu"
Command: **%s** Alias: **%c** **%s**
overview!
duplicate!
Internal help error, non-unique alias "%c"
type="ambiguousalias" alias="%s"
Below are the aliased, short versions of all supported commands
<helpcommands %r>
%c %-20s %s
alias="%c" name="%s" tip="%s"
%c %c %s %-*s %s
parent_alias="%c" alias="%c" parent="%s" name="%-*s" tip="%s"
subcommand
</helpcommands>
%c %-20s %s
aliasinfo
<helpaliases>
</helpaliases>
aliases!
**phpdbg** is a lightweight, powerful and easy to use debugging platform for PHP5.4+
It supports the following commands:
**Information**
**list** list PHP source
**info** displays information on the debug session
**print** show opcodes
**frame** select a stack frame and print a stack frame summary
**back** shows the current backtrace
**help** provide help on a topic
**Starting and Stopping Execution**
**exec** set execution context
**stdin** set executing script from stdin
**run** attempt execution
**step** continue execution until other line is reached
**continue** continue execution
**until** continue execution up to the given location
**next** continue execution up to the given location and halt on the first line after it
**finish** continue up to end of the current execution frame
**leave** continue up to end of the current execution frame and halt after the calling instruction
**break** set a breakpoint at the specified target
**watch** set a watchpoint on $variable
**clear** clear one or all breakpoints
**clean** clean the execution environment
**Miscellaneous**
**set** set the phpdbg configuration
**source** execute a phpdbginit script
**register** register a phpdbginit function as a command alias
**sh** shell a command
**ev** evaluate some code
**quit** exit phpdbg
Type **help <command>** or (**help alias**) to get detailed help on any of the above commands, for example **help list** or **h l**. Note that help will also match partial commands if unique (and list out options if not unique), so **help clea** will give help on the **clean** command, but **help cl** will list the summary for **clean** and **clear**.
Type **help aliases** to show a full alias list, including any registered phpdginit functions
Type **help syntax** for a general introduction to the command syntax.
Type **help options** for a list of phpdbg command line options.
Type **help phpdbginit** to show how to customise the debugger environment.
Below are the command line options supported by phpdbg
**Command Line Options and Flags**
**Option** **Example Argument** **Description**
**-c** **-c**/my/php.ini Set php.ini file to load
**-d** **-d**memory_limit=4G Set a php.ini directive
**-n** Disable default php.ini
**-q** Suppress welcome banner
**-v** Enable oplog output
**-b** Disable colour
**-i** **-i**my.init Set .phpdbginit file
**-I** Ignore default .phpdbginit
**-O** **-O**my.oplog Sets oplog output file
**-r** Run execution context
**-rr** Run execution context and quit after execution (not respecting breakpoints)
**-e** Generate extended information for debugger/profiler
**-E** Enable step through eval, careful!
**-s** **-s=**, **-s**=foo Read code to execute from stdin with an optional delimiter
**-S** **-S**cli Override SAPI name, careful!
**-l** **-l**4000 Setup remote console ports
**-a** **-a**192.168.0.3 Setup remote console bind address
**-x** Enable xml output (instead of normal text output)
**-p** **-p**, **-p=func**, **-p* ** Output opcodes and quit
**-h** Print the help overview
**-V** Print version number
**--** **--** arg1 arg2 Use to delimit phpdbg arguments and php $argv; append any $argv argument after it
**Reading from stdin**
The **-s** option allows inputting a script to execute directly from stdin. The given delimiter ("foo" in the example) needs to be specified at the end of the input on its own line, followed by a line break. If **-rr** has been specified, it is allowed to omit the delimiter (**-s=**) and it will read until EOF. See also the help entry for the **stdin** command.
**Remote Console Mode**
This mode is enabled by specifying the **-a** option. Phpdbg will bind only to the loopback interface by default, and this can only be overridden by explicitly setting the remote console bind address using the **-a** option. If **-a** is specied without an argument, then phpdbg will bind to all available interfaces. You should be aware of the security implications of doing this, so measures should be taken to secure this service if bound to a publicly accessible interface/port.
**Opcode output**
Outputting opcodes requires that a file path is passed as last argument. Modes of execution:
**-p** Outputs the main execution context
**-p* **Outputs all opcodes in the whole file (including classes and functions)
**-p=function_name** Outputs opcodes of a given function in the file
**-p=class_name::** Outputs opcodes of all the methods of a given class
**-p=class_name::method** Outputs opcodes of a given method
Phpdgb uses an debugger script file to initialize the debugger context. By default, phpdbg looks for the file named **.phpdbginit** in the current working directory. This location can be overridden on the command line using the **-i** switch (see **help options** for a more details).
Debugger scripts can also be executed using the **source** command.
A script file can contain a sequence of valid debugger commands, comments and embedded PHP code.
Comment lines are prefixed by the **#** character. Note that comments are only allowed in script files and not in interactive sessions.
PHP code is delimited by the start and end escape tags **<:** and **:>**. PHP code can be used to define application context for a debugging session and also to extend the debugger by defining and **register** PHP functions as new commands.
Also note that executing a **clear** command will cause the current **phpdbginit** to be reparsed / reloaded.
Commands start with a keyword, and some (**break**, **info**, **set**, **print** and **list**) may include a subcommand keyword. All keywords are lower case but also have a single letter alias that may be used as an alternative to typing in thekeyword in full. Note some aliases are uppercase, and that keywords cannot be abbreviated other than by substitution by the alias.
Some commands take an argument. Arguments are typed according to their format:
* **omitted**
* **address** **0x** followed by a hex string
* **number** an optionally signed number
* **method** a valid **Class::methodName** expression
* **func#op** a valid **Function name** follow by # and an integer
* **method#op** a valid **Class::methodName** follow by # and an integer
* **string** a general string
* **function** a valid **Function name**
* **file:line** a valid **filename** follow by : and an integer
In some cases the type of the argument enables the second keyword to be omitted.
Type **help** for an overview of all commands and type **help <command>** to get detailed help on any specific command.
**Valid Examples**
$P quit
$P q
Quit the debugger
$P ev $total[2]
Evaluate and print the variable $total[2] in the current stack frame
$P break 200
$P b my_source.php:200
Break at line 200 in the current source and in file **my_source.php**.
$P b @ ClassX::get_args if $arg[0] == "fred"
$P b ~ 3
Break at ClassX::get_args() if $arg[0] == "fred" and delete breakpoint 3
**Examples of invalid commands**
$P #This is a comment
Comments introduced by the **#** character are only allowed in **phpdbginit** script files.
Note that aliases can be used for either command or sub-command keywords or both, so **info b** is a synomyn for **info break** and **l func** for **list func**, etc.
Note that help will also accept any alias as a parameter and provide help on that command, for example **h p** will provide help on the print command.
Parameter is not unique. For detailed help select help on one of the above commands.
Provide a formatted backtrace using the standard debug_backtrace() functionality. An optional unsigned integer argument specifying the maximum number of frames to be traced; if omitted then a complete backtrace is given.
**Examples**
$P back 5
$P t
A backtrace can be executed at any time during execution.
Breakpoints can be set at a range of targets within the execution environment. Execution will be paused if the program flow hits a breakpoint. The break target can be one of the following types:
**Target** **Alias** **Purpose**
**at** **A** specify breakpoint by location and condition
**del** **d** delete breakpoint by breakpoint identifier number
**Break at** takes two arguments. The first is any valid target. The second is a valid PHP expression which will trigger the break in execution, if evaluated as true in a boolean context at the specified target.
Note that breakpoints can also be disabled and re-enabled by the **set break** command.
**Examples**
$P break test.php:100
$P b test.php:100
Break execution at line 100 of test.php
$P break 200
$P b 200
Break execution at line 200 of the currently PHP script file
$P break \\mynamespace\\my_function
$P b \\mynamespace\\my_function
Break execution on entry to \\mynamespace\\my_function
$P break classX::method
$P b classX::method
Break execution on entry to classX::method
$P break 0x7ff68f570e08
$P b 0x7ff68f570e08
Break at the opline at the address 0x7ff68f570e08
$P break my_function#14
$P b my_function#14
Break at the opline #14 of the function my_function
$P break \\my\\class::method#2
$P b \\my\\class::method#2
Break at the opline #2 of the method \\my\\class::method
$P break test.php:#3
$P b test.php:#3
Break at opline #3 in test.php
$P break if $cnt > 10
$P b if $cnt > 10
Break when the condition ($cnt > 10) evaluates to true
$P break at phpdbg::isGreat if $opt == 'S'
$P break @ phpdbg::isGreat if $opt == 'S'
Break at any opcode in phpdbg::isGreat when the condition ($opt == 'S') is true
$P break at test.php:20 if !isset($x)
Break at every opcode on line 20 of test.php when the condition evaluates to true
$P break ZEND_ADD
$P b ZEND_ADD
Break on any occurrence of the opcode ZEND_ADD
$P break del 2
$P b ~ 2
Remove breakpoint 2
Note: Conditional breaks are costly in terms of runtime overhead. Use them only when required as they significantly slow execution.
Note: An address is only valid for the current compilation.
Classes, constants or functions can only be declared once in PHP. You may experience errors during a debug session if you attempt to recompile a PHP source. The clean command clears the Zend runtime tables which holds the sets of compiled classes, constants and functions, releasing any associated storage back into the storage pool. This enables recompilation to take place.
Note that you cannot selectively trim any of these resource pools. You can only do a complete clean.
Clearing breakpoints means you can once again run code without interruption.
Note: use break delete N to clear a specific breakpoint.
Note: if all breakpoints are cleared, then the PHP script will run until normal completion.
The **ev** command takes a string expression which it evaluates and then displays. It evaluates in the context of the lowest (that is the executing) frame, unless this has first been explicitly changed by issuing a **frame** command.
**Examples**
$P ev $variable
Will print_r($variable) on the console, if it is defined
$P ev $variable = "Hello phpdbg :)"
Will set $variable in the current scope
Note that **ev** allows any valid PHP expression including assignments, function calls and other write statements. This enables you to change the environment during execution, so care is needed here. You can even call PHP functions which have breakpoints defined.
Note: **ev** will always show the result, so do not prefix the code with **return**
The **exec** command sets the execution context, that is the script to be executed. The execution context must be defined either by executing the **exec** command or by using the **-e** command line option.
Note that the **exec** command also can be used to replace a previously defined execution context.
**Examples**
$P exec /tmp/script.php
$P e /tmp/script.php
Set the execution context to **/tmp/script.php**
The **stdin** command takes a string serving as delimiter. It will then read all the input from stdin until encountering the given delimiter on a standalone line. It can also be passed at startup using the **-s=** command line option (the delimiter then is optional if **-rr** is also passed - in that case it will just read until EOF).
This input will be then compiled as PHP code and set as execution context.
**Example**
$P stdin foo
<?php
echo "Hello, world!\n";
foo
finish
The **finish** command causes control to be passed back to the vm, continuing execution. Any breakpoints that are encountered within the current stack frame will be skipped. Execution will then continue until the next breakpoint after leaving the stack frame or until completion of the script
Note when **step**ping is enabled, any opcode steps within the current stack frame are also skipped.
Note **finish** will trigger a "not executing" error if not executing.
The **frame** takes an optional integer argument. If omitted, then the current frame is displayed If specified then the current scope is set to the corresponding frame listed in a **back** trace. This can be used to allowing access to the variables in a higher stack frame than that currently being executed.
**Examples**
$P frame 2
$P ev $count
Go to frame 2 and print out variable **$count** in that frame
Note that this frame scope is discarded when execution continues, with the execution frame then reset to the lowest executiong frame.
**info** commands provide quick access to various types of information about the PHP environment
By default general information about environment and PHP build is shown.
Specific info commands are show below:
**Target** **Alias** **Purpose**
**break** **b** show current breakpoints
**files** **F** show included files
**classes** **c** show loaded classes
**funcs** **f** show loaded functions
**error** **e** show last error
**constants** **d** show user-defined constants
**vars** **v** show active variables
**globals** **g** show superglobal variables
**literal** **l** show active literal constants
**memory** **m** show memory manager stats
The **leave** command causes control to be passed back to the vm, continuing execution. Any breakpoints that are encountered within the current stack frame will be skipped. In effect a temporary breakpoint is associated with any return opcode, so that a break in execution occurs before leaving the current stack frame. This allows inspection / modification of any frame variables including the return value before it is returned
**Examples**
$P leave
$P L
Note when **step**ping is enabled, any opcode steps within the current stack frame are also skipped.
Note **leave** will trigger a "not executing" error if not executing.
The list command displays source code for the given argument. The target type is specficied by a second subcommand keyword:
**Type** **Alias** **Purpose**
**lines** **l** List N lines from the current execution point
**func** **f** List the complete source for a specified function
**method** **m** List the complete source for a specified class::method
**class** **c** List the complete source for a specified class
Note that the context of **lines**, **func** and **method** can be determined by parsing the argument, so these subcommands are optional. However, you must specify the **class** keyword to list off a class.
**Examples**
$P list 2
$P l l 2
List the next 2 lines from the current file
$P list my_function
$P l f my_function
List the source of the function **my_function**
$P list func .mine
$P l f .mine
List the source of the method **mine** from the active class in scope
$P list m my::method
$P l my::method
List the source of **my::method**
$P list c myClass
$P l c myClass
List the source of **myClass**
Note that functions and classes can only be listed if the corresponding classes and functions table in the Zend executor has a corresponding entry. You can use the compile command to populate these tables for a given execution context.
continue
Continue with execution after hitting a break or watchpoint
**Examples**
$P continue
$P c
Continue executing until the next break or watchpoint
Note **continue** will trigger a "not running" error if not executing.
By default, print will show the opcodes of the current execution context.
Other printing commands give access to instruction information.
Specific printers loaded are show below:
**Type** **Alias** **Purpose**
**exec** **e** print out the instructions in the execution context
**opline** **o** print out the instruction in the current opline
**class** **c** print out the instructions in the specified class
**method** **m** print out the instructions in the specified method
**func** **f** print out the instructions in the specified function
**stack** **s** print out the instructions in the current stack
In case passed argument does not match a specific printing command, it will treat it as function or method name and print its opcodes
**Examples**
$P print class \\my\\class
$P p c \\my\\class
Print the instructions for the methods in \\my\\class
$P print method \\my\\class::method
$P p m \\my\\class::method
Print the instructions for \\my\\class::method
$P print func .getSomething
$P p f .getSomething
Print the instructions for ::getSomething in the active scope
$P print func my_function
$P p f my_function
Print the instructions for the global function my_function
$P print opline
$P p o
Print the instruction for the current opline
$P print exec
$P p e
Print the instructions for the execution context
$P print stack
$P p s
Print the instructions for the current stack
register
Register any global function for use as a command in phpdbg console
**Examples**
$P register scandir
$P R scandir
Will register the scandir function for use in phpdbg
Note: arguments passed as strings, return (if present) print_r'd on console
Enter the vm, starting execution. Execution will then continue until the next breakpoint or completion of the script. Add parameters you want to use as $argv. Add a trailing **< filename** for reading STDIN from a file.
**Examples**
$P run
$P r
Will cause execution of the context, if it is set
$P r test < foo.txt
Will execute with $argv[1] == "test" and read from the foo.txt file for STDIN
Note that the execution context must be set. If not previously compiled, then the script will be compiled before execution.
The **set** command is used to configure how phpdbg looks and behaves. Specific set commands are as follows:
**Type** **Alias** **Purpose**
**prompt** **p** set the prompt
**color** **c** set color <element> <color>
**colors** **C** set colors [<on|off>]
**oplog** **O** set oplog [output]
**break** **b** set break **id** <on|off>
**breaks** **B** set breaks [<on|off>]
**quiet** **q** set quiet [<on|off>]
**stepping** **s** set stepping [<opcode|line>]
**refcount** **r** set refcount [<on|off>]
Valid colors are **none**, **white**, **red**, **green**, **yellow**, **blue**, **purple**, **cyan** and **black**. All colours except **none** can be followed by an optional **-bold** or **-underline** qualifier.
Color elements can be one of **prompt**, **notice**, or **error**.
**Examples**
$P S C on
Set colors on
$P set p >
$P set color prompt white-bold
Set the prompt to a bold >
$P S c error red-bold
Use red bold for errors
$P S refcount on
Enable refcount display when hitting watchpoints
$P S b 4 off
Temporarily disable breakpoint 4. This can be subsequently reenabled by a **s b 4 on**.
Direct access to shell commands saves having to switch windows/consoles
**Examples**
$P sh ls /usr/src/php-src
Will execute ls /usr/src/php-src, displaying the output in the console
source
Sourcing a **phpdbginit** script during your debugging session might save some time.
**Examples**
$P source /my/init
$P < /my/init
Will execute the phpdbginit file at /my/init
export
Exporting breakpoints allows you to share, and or save your current debugging session
**Examples**
$P export /my/exports
$P > /my/exports
Will export all breakpoints to /my/exports
Execute opcodes until next line
**Examples**
$P s
Will continue and break again in the next encountered line
The **next** command causes control to be passed back to the vm, continuing execution. Any breakpoints that are encountered before the next source line will be skipped. Execution willbe stopped when that line is left.
Note when **step**ping is enabled, any opcode steps within the current line are also skipped.
Note that if the next line is **not** executed then **all** subsequent breakpoints will be skipped.
Note **next** will trigger a "not executing" error if not executing.
The **until** command causes control to be passed back to the vm, continuing execution. Any breakpoints that are encountered before the next source line will be skipped. Execution will then continue until the next breakpoint or completion of the script
Note when **step**ping is enabled, any opcode steps within the current line are also skipped.
Note that if the next line is **not** executed then **all** subsequent breakpoints will be skipped.
Note **until** will trigger a "not executing" error if not executing.
Sets watchpoints on variables as long as they are defined
Passing no parameter to **watch**, lists all actually active watchpoints
**Format for $variable**
**$var** Variable $var
**$var[]** All array elements of $var
**$var->** All properties of $var
**$var->a** Property $var->a
**$var[b]** Array element with key b in array $var
Subcommands of **watch**:
**Type** **Alias** **Purpose**
**array** **a** Sets watchpoint on array/object to observe if an entry is added or removed
**recursive** **r** Watches variable recursively and automatically adds watchpoints if some entry is added to an array/object
**delete** **d** Removes watchpoint
Note when **recursive** watchpoints are removed, watchpoints on all the children are removed too
**Examples**
$P watch
List currently active watchpoints
$P watch $array
$P w $array
Set watchpoint on $array
$P watch recursive $obj->
$P w r $obj->
Set recursive watchpoint on $obj->
$P watch delete $obj->a
$P w d $obj->a
Remove watchpoint $obj->a
Technical note: If using this feature with a debugger, you will get many segmentation faults, each time when a memory page containing a watched address is hit.
You then you can continue, phpdbg will remove the write protection, so that the program can continue.
If phpdbg could not handle that segfault, the same segfault is triggered again and this time phpdbg will abort.
show breakpoints
show included files
classes
show loaded classes
show last error
constants
show user defined constants
show active variables
globals
show superglobals
literal
show active literal constants
memory
show memory manager stats
Included files: %d
num="%d"
includedfilecount
Could not fetch included file count, invalid data source
File: %s
name="%s"
includedfile
Could not fetch file name, invalid data source, aborting included file listing
Last error: %s at %s line %d
error="%s" file="%s" line="%d"
lasterror
No error found!
error=""
Cannot fetch all the constants, invalid data source
User-defined constants (%d)
constantinfo
Address Refs Type Constant
%-18p %-7d %-9s %.*s
string (%zd) "%.*s%s"
address="%p" refcount="%d" type="%s" name="%.*s" length="%zd" value="%.*s"
constant
%-18p %-7d %-9s %.*s
address="%p" refcount="%d" type="%s" name="%.*s"
%-18p %-7d %-9s %.*s
bool (true)
address="%p" refcount="%d" type="%s" name="%.*s" value="true"
%-18p %-7d %-9s %.*s
bool (false)
address="%p" refcount="%d" type="%s" name="%.*s" value="false"
%-18p %-7d %-9s %.*s
int (%ld)
address="%p" refcount="%d" type="%s" name="%.*s" value="%ld"
%-18p %-7d %-9s %.*s
double (%lf)
address="%p" refcount="%d" type="%s" name="%.*s" value="%lf"
Cannot show information about superglobal variable %.*s
unreachable="%.*s"
variableinfo
No active op array!
type="op_array"
inactive
No active symbol table!
type="symbol_table"
Cannot fetch all data from the symbol table, invalid data source
Superglobal variables (%d)
Variables in %s::%s() (%d)
method="%s::%s" num="%d"
Variables in %s() (%d)
function="%s" num="%d"
Variables in %s (%d)
file="%s" num="%d"
Variables @ %p (%d)
opline="%p" num="%d"
Address Refs Type Variable
%-18p %-7d %-9s %s$%.*s
|-------(typeof)------> (%s)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" type="%s"
variable
%-18p %-7d %-9s %s$%.*s
|-------(typeof)------> (unknown)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" type="unknown"
%-18p %-7d %-9s %s$%.*s
|-----(instanceof)----> (%s)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" instanceof="%s"
%-18p %-7d %-9s %s$%.*s
|-----(instanceof)----> (unknown)
%-18p %-7d %-9s %s$%.*s
string (%zd) "%.*s%s"
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" length="%zd" value="%.*s"
%-18p %-7d %-9s %s$%.*s
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s"
%-18p %-7d %-9s %s$%.*s
bool (true)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" value="true"
%-18p %-7d %-9s %s$%.*s
bool (false)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" value="false"
%-18p %-7d %-9s %s$%.*s
int (%ld)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" value="%ld"
%-18p %-7d %-9s %s$%.*s
double (%lf)
address="%p" refcount="%d" type="%s" refstatus="%s" name="%.*s" value="%lf"
address="%p" name="%s"
Literal Constants in %s::%s() (%d)
literalinfo
Literal Constants in %s() (%d)
Literal Constants in %s (%d)
Literal Constants @ %p (%d)
|-------- C%u -------> [
id="%u"
Not executing!
type="execution"
Memory Manager Information
meminfo
Current
current
|-------> Used:
%.3f kB
mem="%.3f"
|-------> Real:
%.3f kB
Memory Manager Disabled!
type="memory_manager"
Internal
Interface
Abstract Class
%s %s %.*s (%d)
type="%s" flags="%s" name="%.*s" methodcount="%d"
Not all classes could be fetched, possibly invalid data source
User Classes (%d)
classinfo
<parents %r>
|--------
</parents>
|---- in %s on line %u
file="%s" line="%u"
classsource
|---- no source code
Not all functions could be fetched, possibly invalid data source
User Functions (%d)
functioninfo
{main}
|-------- %s
in %s on line %d
file="%s" line="%d"
functionsource
(no source code)
sapi\phpdbg\phpdbg_io.c
Read operation timed out!
---Type <return> to continue or q <return> to quit---
Host '%s' not found. %s
Unable to create socket
lists the specified lines
lists the specified class
lists the specified method
lists the specified function
Not executing, and execution context not set
Unsupported parameter type (%s) for command
type="wrongarg" got="%s"
Could not find %s::%s
type="notfound" method="%s::%s"
Could not find the class %s
type="notfound" class="%s"
The source of the requested class (%s) cannot be found
type="nosource" class="%s"
The class requested (%s) is not user defined
type="internalclass" class="%s"
The requested class (%s) could not be found
Could not find information about included file...
type="unknownfile"
<list %r file="%s">
%05u: %.*s
line="%u" code="%.*s"
>%05u: %.*s
line="%u" code="%.*s" current="current"
</list>
The function requested (%s) is not user defined
No active class
type="noclasses"
No function table loaded
type="function_table"
Function %s not found
type="nofunction" function="%s"
Could not list function %s, invalid data source
function="%s"
UNKNOWN
$%.*s%c
FAST_CALL<FROM_FINALLY>
TO_CATCH
TO_FINALLY
FAST_RET<%s>
J%td or J%td
%-23s %-20s %-20s %-20s
L%-5u %16p %s %s
line="%u" opline="%p" op="%s" file="%s"
L%-5u %16p %s %s
(null)
req="%lu"
Illegal length modifier specified '%c' in s[np]printf call
</stream>
<phpdbg>
</phpdbg>
[%sm[%.*s]
[%.*s]
notice
normal
stderr
stdout
<stream type="%s">
[%ld %.8F]: %.*s
req="%lu" %.*s
"
<%s severity="%s" %.*s msgout="%.*s" />
<%s severity="%s" %.*s msgout="" />
<phpdbg>
</phpdbg>
%a %b %d %H.%%04d %Y
[%s]: %s
$undefined
"eval"
"shell"
"if (condition)"
"truthy (true, on, yes or enabled)"
"falsy (false, off, no or disabled)"
"string (some input, perhaps)"
": (colon)"
":: (double colon)"
"# (pound sign followed by digits)"
"# (pound sign)"
"protocol (file://)"
"digits (numbers)"
"literal (string)"
"address"
"opcode"
"identifier (command or function name)"
"input (input string or data)"
"input"
"request id (-r %d)"
$accept
parameters
parameter
req_id
full_expression
syntax error
syntax error, unexpected %s
syntax error, unexpected %s, expecting %s
syntax error, unexpected %s, expecting %s or %s
syntax error, unexpected %s, expecting %s or %s or %s
syntax error, unexpected %s, expecting %s or %s or %s or %s
memory exhausted
Parse Error: %s
type="parseerror" msg="%s"
print out the instructions in the main execution context
print out the instruction in the current opline
print out the instructions in the specified class
print out the instructions in the specified method
print out the instructions in the specified function
print out the instructions in the current stack
Not Executing!
L%d-%d %s::%s() %s - %p + %d ops
type="User" startline="%d" endline="%d" method="%s::%s" file="%s" opline="%p"
printoplineinfo
L%d-%d %s() %s - %p + %d ops
type="User" startline="%d" endline="%d" function="%s" file="%s" opline="%p"
L%-4u #%-5u %s
line="%u" opnum="%u" op="%s"
Internal %s::%s()
type="Internal" method="%s::%s"
Internal %s()
type="Internal" function="%s"
Context %s (%d ops)
printinfo
No execution context set
type="nocontext"
Stack in %s::%s() (%d ops)
Stack in %s() (%d ops)
Stack in %s (%d ops)
Stack @ %p (%d ops)
%s %s: %s (%d methods)
type="%s" flag="%s" class="%s" num="%d"
<printmethods %r>
</printmethods>
The class %s could not be found
type="noclass" class="%s"
%s Method %s (%d ops)
type="%s" flags="Method" symbol="%s" num="%d"
The method %s::%s could not be found
Method
Function
%s %s %s (%d ops)
type="%s" flags="%s" symbol="%s" num="%d"
The function %s could not be found
Couldn't fetch function %.*s, invalid data source
function="%.*s"
function name: (null)
function name: %.*s
function name: %s::%s (internal)
function name: %s::%s
interface
abstract Class
internal
%s %s: %s
%d methods:
function name: %s
set execution context
read script from stdin
step through execution
continue execution
attempt execution
evaluate some code
continue past the current line
continue past the end of the stack
continue until the end of the stack
print something
set breakpoint
show trace
switch to a frame
lists some code
displays some informations
clean the execution environment
clear breakpoints
show help menu
set phpdbg configuration
register a function
execute a phpdbginit
export breaks to a .phpdbginit script
shell a command
exit phpdbg
wait for other process
set watchpoint
step over next line
set EOL
%s::%s#%ld
%s#%ld
%s:%ld
%s:#%ld
phpdbginit code
Unrecognized command in %s:%d: %s, %b!
%b file="%s" line="%d" input="%s"
initfailure
Unrecognized command on line %d: %s, %b!
%b line="%d" input="%s"
sapi\phpdbg\phpdbg_prompt.c
Failed to open %s for initialization
type="openfile" file="%s"
Do you really want to stop execution to set a new execution context?
Unsetting old execution context: %s
type="unset" context="%s"
Destroying compiled opcodes
type="unsetops"
Set execution context: %s
type="set" context="%s"
Execution context not changed
type="unchanged"
Cannot use %s as execution context, not a valid file or symlink
type="invalid" context="%s"
Cannot stat %s, ensure the file exists
type="notfound" context="%s"
Successful compilation of stdin input
context="-"
No execution context
Successful compilation of %s
context="%s"
Could not open file %s
type="openfailure" context="%s"
Not executing
type="noexec"
Already at the end of the function
type="end"
Currently in frame #%d
__tostring
Uncaught %s in %s on line %lld
name="%s" file="%s" line="%lld"
exception
exceptionmsg
Do you really want to restart execution?
Failed to compile %s, cannot run
type="compilefailure" context="%s"
Invalid run command, cannot put further arguments after stdin
Could not open '%s' for reading from stdin
Invalid run command, unterminated escape sequence
Nothing to execute!
Printing variable %.*s
variable="%.*s"
<eval %r>
</eval>
Could not fetch data, invalid data source
eval()'d code
Invalid arguments to print, expected nothing, function name or method name
type="invalidarg"
Execution Context Information
<printinfo %r>
Readline no
readline="no"
Libedit no
libedit="no"
Exec %s
Compiled %s
compiled="%s"
Stepping %s
stepping="%s"
Quietness %s
quiet="%s"
Oplog %s
oplog="%s"
Opcodes %d
ops="%d"
Variables %d
vars="%d"
Executing %s
executing="%d"
VM Return %d
vmret="%d"
Classes %d
classes="%d"
Functions %d
functions="%d"
Constants %d
constants="%d"
Included %d
includes="%d"
</printinfo>
No set command selected!
type="toofewargs" expected="1"
Execution context not set!
Failed to execute %s
type="failure" smd="%s"
module
extension_dir
%s%c%s
Not a full path given or extension_dir ini setting is not set
type="relpath"
type="unknown"
Unknown reason
extension_version_info
_extension_version_info
zend_extension_entry
_zend_extension_entry
%s requires Zend Engine API version %d, which does not match the installed Zend Engine API version %d
type="wrongapi" extension="%s" apineeded="%d" apiinstalled="%d"
API320151012,TS,VC14
%s was built with configuration %s, whereas running engine is %s
type="wrongbuild" extension="%s" buildneeded="%s" buildinstalled="%s"
Unable to startup Zend extension %s
type="startupfailure" extension="%s"
Zend extension
get_module
_get_module
type="wrongbuild" module="%s" buildneeded="%s" buildinstalled="%s"
Unable to register module %s
type="registerfailure" module="%s"
Unable to startup module %s
type="startupfailure" module="%s"
Unable to initialize module %s
type="initfailure" module="%s"
This shared object is nor a Zend extension nor a module
type="nophpso"
Failed to stat %s, file does not exist
type="notfound" file="%s"
Failed to open or create %s, check path and permissions
type="openfailure" file="%s"
Registered %s
The requested function (%s) could not be found
type="notfound" function="%s"
The requested name (%s) is already in use
type="inuse" function="%s"
Do you really want to clean your current environment?
Cleaning Execution Environment
<cleaninfo %r>
Includes %d
</cleaninfo>
Clearing Breakpoints
<clearinfo %r>
File %d
files="%d"
Functions %d
Methods %d
methods="%d"
Oplines %d
oplines="%d"
File oplines %d
fileoplines="%d"
Function oplines %d
functionoplines="%d"
Method oplines %d
methodoplines="%d"
Conditionals %d
eval="%d"
</clearinfo>
Set watchpoint on %.*s
Not running
message
Uncaught %s in %s on line %lld: %.*s
Breaking for leave at %s:%u
id="leave" file="%s" line="%u"
Program received signal SIGINT
type="SIGINT"
signal
Current opline: %p (op #%lu) in %s:%u
opline="%p" num="%lu" file="%s" line="%u"
hardinterrupt
Current opline: in internal function %s
func="%s"
Current opline: executing internal code
Current opline: %p (op_array information unavailable)
opline="%p"
No information available about executing context
argument required
unknown EOL name '%s', give crlf, lf, cr
unknown EOL name '%s', give crlf, lf, cr
usage: set prompt [<string>]
pagination
usage: set pagination [<on|off>]
usage: set oplog [<output>]
usage: set break id [<on|off>]
breaks
usage: set breaks [<on|off>]
usage: set quiet [<on|off>]
stepping
usage: set stepping [<line|op>]
refcount
usage: set refcount [<on|off>]
usage: set lines [<number>]
Current prompt: %s
str="%s"
setprompt
Pagination %s
active="%s"
setpagination
set pagination used incorrectly: set pagination <on|off>
type="wrongargs"
Lines %ld
setlines
set lines used incorrectly: set lines <number>
Breakpoint #%ld %s
id="%ld" active="%s"
setbreak
type="nobreak" id="%ld"
set break used incorrectly: set break [id] <on|off>
Breakpoints %s
setbreaks
set breaks used incorrectly: set breaks <on|off>
Oplog %s
setoplog
Failed to open %s for oplog
Closing previously open oplog
type="closingold"
Successfully opened oplog %s
file="%s"
Quietness %s
setquiet
Stepping %s
type="%s"
setstepping
usage set stepping [<opcode|line>]
Showing refcounts %s
setrefcount
Tried to allocate more than ((2 * 1024 * 1024) * 2) bytes from stack memory in signal handler ... bailing out of signal handler
Bailed out without a bailout address in signal handler!
white-underline
red-underline
green-bold
green-underline
yellow
yellow-bold
yellow-underline
blue-bold
blue-underline
purple
purple-bold
purple-underline
cyan-bold
cyan-underline
black-bold
black-underline
[no active file]
[%sm%s
Could not fetch class %.*s, invalid data source
class="%.*s"
%.*s%.*s%s
%.*s is undefined
type="undefined" variable="%.*s"
%.*s is nor an array nor an object
type="notiterable" variable="%.*s"
Malformed input
type="invalidinput"
<element
name="%.*s"
name="%ld"
severity="error" ></element>
</element>
<property
name="%s"
protection="protected"
class="%s" protection="private"
name="%.*s" protection="public"
name="%ld" protection="public"
severity="error" ></property>
</property>
<bool refstatus="%s" value="true" />
<bool refstatus="%s" value="false" />
<null refstatus="%s" />
<int refstatus="%s" value="%lld" />
<float refstatus="%s" value="%.*G" />
<string refstatus="%s" length="%zd" value="%.*s" />
<recursion />
<array refstatus="%s" num="%d">
<object refstatus="%s" class="%.*s" id="%d" num="%d">
</array>
</object>
<resource refstatus="%s" id="%pd" type="%s" />
"%.*s"%c
Rsrc #%d
array(%d)
%.*s%c
<constant>
unknown type: %d
create watchpoint on an array
delete
delete watchpoint
recursive
create recursive watchpoints
%.*s%s%s%s
%.*s[]
%.*s%s%lld%s
Nothing was deleted, no corresponding watchpoint found
type="nowatch"
watchdelete
Removed watchpoint %.*s
Set recursive watchpoint on %.*s
watchrecursive
Set array watchpoint on %.*s
watcharray
recursively
%.*s was removed, removing watchpoint%s
variable="%.*s" recursive="%s"
Breaking on watchpoint %.*s
variable="%s"
watchhit
<watchdata %r>
Old value inaccessible or destroyed
type="old" inaccessible="inaccessible"
watchvalue
Old value:
<watchvalue %r type="old">
</watchvalue>
Watchpoint %.*s was unset, removing watchpoint
(reference)
New value%s:
reference="reference"
<watchvalue %r%s type="new">
New refcount: %d
type="new" refcount="%d"
watchrefcount
%d elements were removed from the array
removed="%d"
watchsize
%d elements were added to the array
added="%d"
Internal pointer of array was changed
watcharrayptr
Old refcount: %d
type="old" refcount="%d"
</watchdata>
<watchlist %r>
simple
%.*s (%s, %s)
variable="%.*s" on="%s" type="%s"
watchvariable
</watchlist>
C:\php-sdk\php70dev\vc14\x64\obj\Release_TS\php7phpdbg.pdb
.text$mn
.text$mn$00
.text$x
.idata$5
.00cfg
.CRT$XCA
.CRT$XCZ
.CRT$XIA
.CRT$XIZ
.CRT$XLA
.CRT$XLZ
.CRT$XPA
.CRT$XPZ
.CRT$XTA
.CRT$XTZ
.cfguard
.rdata
.rdata$T
.rdata$zzzdbg
.rtc$IAA
.rtc$IZZ
.rtc$TAA
.rtc$TZZ
.xdata
.edata
.idata$2
.idata$3
.idata$4
.idata$6
.pdata
.tls$ZZZ
.rsrc$01
.rsrc$02
php7phpdbg.dll
qPENSSL_Applink
qphpdbg_asprintf
qphpdbg_xml_asprintf
qhpdbg_activate_err_buf
qhpdbg_ask_user_permission
qhpdbg_check_caught_ex
qhpdbg_clear_breakpoints
qhpdbg_clear_param
qhpdbg_close_socket
qhpdbg_consume_bytes
qhpdbg_consume_stdin_line
qhpdbg_copy_param
qhpdbg_create_listenable_socket
qhpdbg_current_file
qhpdbg_delete_breakpoint
qhpdbg_destroy_input
qhpdbg_disable_breakpoint
qhpdbg_disable_breakpoints
qhpdbg_enable_breakpoint
qhpdbg_enable_breakpoints
qhpdbg_export_breakpoints
qhpdbg_export_breakpoints_to_string
qhpdbg_find_breakbase
qhpdbg_find_breakbase_ex
qhpdbg_find_breakpoint
qhpdbg_free_err_buf
qhpdbg_get_color
qhpdbg_get_colors
qhpdbg_get_element
qhpdbg_get_function
qhpdbg_get_param_type
qhpdbg_get_prompt
qhpdbg_get_terminal_height
qhpdbg_get_terminal_width
qhpdbg_hash_param
qhpdbg_hit_breakpoint
qhpdbg_is_addr
qhpdbg_is_class_method
qhpdbg_is_empty
qhpdbg_is_numeric
qhpdbg_load_module_or_extension
qhpdbg_log_internal
qhpdbg_match_param
qhpdbg_mixed_read
qhpdbg_mixed_write
qhpdbg_open_socket
qhpdbg_out_internal
qhpdbg_output_err_buf
qhpdbg_param_debug
qhpdbg_param_tostring
qhpdbg_parse_variable
qhpdbg_parse_variable_with_arg
qhpdbg_print
qhpdbg_print_breakpoint
qhpdbg_print_breakpoints
qhpdbg_print_opcodes
qhpdbg_read_input
qhpdbg_reset_breakpoints
qhpdbg_resolve_op_array_break
qhpdbg_resolve_op_array_breaks
qhpdbg_resolve_opline_break
qhpdbg_resolve_path
qhpdbg_resolve_pending_file_break
qhpdbg_resolve_pending_file_break_ex
qhpdbg_rlog_internal
qhpdbg_send_bytes
qhpdbg_set_async_io
qhpdbg_set_breakpoint_at
qhpdbg_set_breakpoint_expression
qhpdbg_set_breakpoint_file
qhpdbg_set_breakpoint_file_ex
qhpdbg_set_breakpoint_file_opline
qhpdbg_set_breakpoint_function_opline
qhpdbg_set_breakpoint_method
qhpdbg_set_breakpoint_method_opline
qhpdbg_set_breakpoint_opcode
qhpdbg_set_breakpoint_opline
qhpdbg_set_breakpoint_opline_ex
qhpdbg_set_breakpoint_symbol
qhpdbg_set_color
qhpdbg_set_color_ex
qhpdbg_set_prompt
qhpdbg_stack_execute
qhpdbg_stack_free
qhpdbg_stack_push
qhpdbg_stack_resolve
qhpdbg_stack_separate
qhpdbg_stack_verify
qhpdbg_trim
qhpdbg_vprint
qhpdbg_watchpoint_parse_input
qhpdbg_xml_internal
qhpdbg_xml_var_dump
g_xml_vasprintf
strpprintf
sapi_module
zend_hash_index_find@@16
php_output_activate
php_module_startup
sapi_globals_id
OnUpdateString
zend_register_stringl_constant
zend_is_true@@8
php_output_deactivate
zend_hash_clean@@8
zend_execute_ex
zend_hash_find@@16
zend_hash_del@@16
destroy_op_array
ts_allocate_id
zend_register_constant
zend_hash_destroy@@8
__zend_malloc
_php_stream_open_wrapper_ex
_php_stream_free
zend_register_long_constant
zend_parse_parameters
tsrm_get_ls_cache
zend_llist_destroy
_array_init
zend_error
_estrdup@@8
_zend_hash_str_update@@32
destroy_zend_function
zend_hash_str_find@@24
executor_globals_id
zend_get_executed_filename
zend_get_executed_lineno
virtual_stat
compiler_globals_id
_zend_bailout
_estrndup@@16
zend_hash_add_empty_element@@16
_zend_hash_init@@32
_zend_hash_add_new@@24
php_register_variable
php_sprintf
_zend_hash_index_update@@24
php_import_environment_variables
_zval_get_string_func@@8
_zend_hash_index_add_new@@24
zend_register_ini_entries
_efree@@8
core_globals_id
_emalloc@@8
zend_hash_exists@@16
php_module_shutdown_wrapper
_zend_hash_str_add@@32
zend_hash_str_del@@24
zend_rebuild_symbol_table
zend_string_tolower@@8
_php_stream_stat_path
zend_hash_internal_pointer_end_ex@@16
_zval_dtor_func@@8
zend_execute
zend_hash_str_exists@@24
zend_hash_index_del@@16
virtual_realpath
zend_str_tolower_dup@@16
zend_get_opcode_name
php_addcslashes
zend_hash_get_current_data_ex@@16
zend_hash_func
zend_hash_index_exists@@16
_zend_hash_index_add@@24
zend_compile_string
_zend_hash_add@@24
_erealloc@@16
ap_php_asprintf
zend_fetch_debug_backtrace
zend_hash_move_forward_ex@@16
output_globals_id
zend_hash_internal_pointer_reset_ex@@16
php_printf
spprintf
zend_print_zval
is_zend_mm
zend_zval_type_name
_zend_hash_next_index_insert@@16
zend_is_auto_global
zend_memory_peak_usage
zend_hash_apply@@16
zend_rsrc_list_get_rsrc_type
_zend_hash_update@@24
zend_mm_set_heap
zend_memory_usage
ap_php_snprintf
zend_compile_file
zend_stream_fixup
zend_is_executing
php_escape_html_entities
zend_make_printable_zval
php_gcvt
php_conv_fp
ap_php_conv_10
gettimeofday
ap_php_conv_p2
zend_binary_strcasecmp@@32
zend_str_tolower_copy@@24
zend_vm_call_opcode_handler
zend_destroy_file_handle
zend_clear_exception
virtual_fopen
php_win32_error_to_msg
zend_update_property_string
add_next_index_string
zend_get_exception_base
zend_throw_exception_internal
php_build_argv
add_next_index_long
execute_ex
zend_ini_string_ex
smart_str_erealloc@@16
zend_try_exception_handler
zend_generator_check_placeholder_frame
virtual_chdir
zend_call_method
php_stream_open_for_zend_ex
zend_exception_error
gc_possible_root@@8
_zval_ptr_dtor
zend_objects_store_del
add_next_index_stringl
_zval_get_long_func@@8
function_add_ref
zend_fcall_info_args
zend_call_function
zend_exception_restore
zend_timeout
virtual_popen
virtual_chdir_file
zend_register_module_ex
zend_startup_module_ex
pclose
zend_append_version_info
zend_register_extension
zend_read_property
zend_eval_stringl
zend_print_zval_r
zend_next_free_module
zend_mm_startup_ex
zend_is_auto_global_str
zend_hash_apply_with_arguments
zend_fetch_class_by_name
expand_filepath
zend_lookup_class
instanceof_function@@16
_zend_handle_numeric_str_ex@@24
zend_unmangle_property_name_ex
_ecalloc@@16
zend_llist_clean
zend_llist_count
zend_llist_get_last_ex
zend_llist_get_prev_ex
zend_print_flat_zval_r
php7ts.dll
getaddrinfo
inet_pton
WS2_32.dll
FormatMessageA
GetLastError
LoadLibraryA
GetProcAddress
LocalFree
FreeLibrary
WaitForSingleObject
ExitThread
CancelSynchronousIo
TerminateThread
CreateThread
GetConsoleScreenBufferInfo
GetStdHandle
VirtualProtect
RtlCaptureContext
RtlLookupFunctionEntry
RtlVirtualUnwind
UnhandledExceptionFilter
SetUnhandledExceptionFilter
GetCurrentProcess
TerminateProcess
IsProcessorFeaturePresent
QueryPerformanceCounter
GetCurrentProcessId
GetCurrentThreadId
GetSystemTimeAsFileTime
DisableThreadLibraryCalls
InitializeSListHead
IsDebuggerPresent
KERNEL32.dll
memmove
strchr
memchr
strstr
longjmp
__C_specific_handler
__std_type_info_destroy_list
memset
VCRUNTIME140.dll
calloc
ferror
__acrt_iob_func
fflush
fclose
clearerr
realloc
__stdio_common_vfprintf
_setmode
_close
_write
_strnicmp
_fileno
fwrite
_lseek
malloc
isspace
strncmp
_errno
strtoul
_isnan
_fpclass
strftime
localeconv
_localtime64
isdigit
islower
strtok
_initterm
_initterm_e
_seh_filter_dll
_configure_narrow_argv
_initialize_narrow_environment
_initialize_onexit_table
_register_onexit_function
_execute_onexit_table
_crt_atexit
_cexit
_strdup
api-ms-win-crt-runtime-l1-1-0.dll
api-ms-win-crt-stdio-l1-1-0.dll
api-ms-win-crt-heap-l1-1-0.dll
api-ms-win-crt-string-l1-1-0.dll
api-ms-win-crt-convert-l1-1-0.dll
api-ms-win-crt-math-l1-1-0.dll
api-ms-win-crt-time-l1-1-0.dll
api-ms-win-crt-locale-l1-1-0.dll
memcmp
memcpy
__intrinsic_setjmp
strcmp
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"></supportedOS>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></supportedOS>
</application>
</compatibility>
</assembly>PAD
uy'46-15mvc %*
mWRale<
iQX75a:
arbAletp
eJiba(
6E8,wv'q
:e87tZ
ksbacM
AT7'5nb*qcL1
8%!RmH!U{
vGQlet
9!-j\K
#>-;5evi>,?
?`7%#5-05nvb)
qEZfale<
6FAlUt8{
H8VIe3
%hz+UanN
wnb&{t!
.jdl-%#}sev
67'y{Z
#ct8"'}
7:n}9v
:p&`I
9arb(o
hvj ,#<-9+fj
$(bc636 9$"y`}
3ar["<j
arba%f
$tUt87
6FQnet8z
eC%HE1
_cmet7
!d-ww'}
Irbad G
}erba
Ysbal-
zi:a-H
i4p4yE
6F)het8
Ysbal G
vGQlet
4r*b#u5
uba-:5fvh .=?1
et8v:q1:(
H}"ovc)
P(ab -2<
~GQletp
1DBbal)
Dyht?3>>2
HeK&3<
k"He#&(
gHeC'0
kRHe3&X
: EeNO#0
qhfz)+
up}("\
{MAaAj
-z3.^%
mp[Sl
"[m+3%
k h KA/D":x
}6xGuQ
ve CK6K
ATt^=k(
~\Jm;n7
E\S2LIx
KlBQvX
2siciOG?
w7@5.[M
_Ay\&i
vvQTUu
YIG7fb
Y[I3sq_}*(
Zxww-//
OI7w^U
zx]?`bGE
b(]]S38
?gcX$+AGibFbg_g
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
VS_VERSION_INFO
StringFileInfo
040904b0
Comments
Thanks to Felipe Pena, Joe Watkins, Bob Weinand
CompanyName