php-src/sapi/phpdbg/xml.md
2019-10-19 19:19:28 +02:00

651 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

phpdbg XML format
=================
Common attributes
=================
severity
--------
- indicates the genre of phpdbg system output
- usually one of these values:
- normal
- notice
- error
msgout
------
- text message output related to the xml data (e.g. <intro severity="normal" help="help" msgout="To get help using phpdbg type "help" and press enter" />)
req
---
- the request id, if one was passed to the last command (via -r %d, where %d is the id) (and the output is related to that message)
file
----
- refers to a filename
method
------
- format classname::methodname
- refers to a method
function
--------
- refers to a function
symbol
------
- either function or method (is method if "::" are present)
opline
------
- in hexadecimal format
- refers to a specific pointer to a (zend_)op
opcode
------
- refers to an opcode (ZEND_*)
type
----
- general attribute for most errors, describes the genre of the error
General tags
============
intro
-----
- appears on startup if -q flag wasn't provided as command line arg
- before any input possibility
- attributes may be spread over multiple tags
- wrapped in <intros> tag
### attributes ###
- version: current phpdbg version (as string)
- help: command name for help
- report: URL for bug reporting
phpdbg
------
- general text message output from phpdbg system
stream
------
- any output by PHP itself (e.g. <stream type="stdout">test</stream>)
### attributes ###
- type: stderr or stdout
php
---
- php error output
### attributes ###
- msg: the error message
General error tags
==================
command
-------
- general errors about commands
### possible attributes ###
- type
- toomanyargs: more arguments than allowed
- noarg: argument missing
- wrongarg: wrong type of argument (e.g. letters instead of integer)
- toofewargs: not enough arguments
- notfound: command (or subcommand) doesn't exist
- ambiguous: command was ambiguous
- invalidcommand: command input is totally invalid
- (nostack: should not happen: is an internal error)
- (emptystack: should not happen: is an internal error)
- command: passed command
- subcommand: passed subcommand (present if the error is related to the subcommand)
- expected: count of expected arguments
- got: type of argument for type "wrongarg"
- num: if possible, information about which parameter had a wrong argument
inactive
--------
- by type
- op_array: nothing was yet compiled (probably because no execution context set)
- symbol_table: no symbol table present (not yet initiailized or already destructed)
- noexec: not in execution
- memory_manager: using the native memory manager (malloc, free, realloc) instead of e.g. the Zend MM
- notfound: file not found
- nocontext: execution context was not set (or compilation had failed)
- isrunning: command requires no running script
Commands
========
export
------
- tag: <exportbreakpoint />
- usually triggered by successful export command
- may appear when cleaning to temporary store breakpoints
- errors by type
- openfailure: could not create file
### attributes ###
- count: number of exported breakpoints
break / info break
------------------
- General tag for breakpoint creation, deletion and hits is "<breakpoint />"
### possible attributes ###
- id: the breakpoint id (if the leave command was executed, the id has the value "leave")
- num: the nth opline of a function/method/file
- add: has value "success"/"fail": a brekpoint was successfully/not added
- pending: the breakpoint is waiting for resolving (e.g. a file opline on a not yet loaded file)
- deleted: has value "success"/"fail": a breakpoint was successfully/not deleted
- eval: the condition on conditional breakpoints
- file
- opline
- opcode
- symbol
- function
- method
- line
- listing breakpoints always in a container element "<breakpoints>"
- Child nodes:
- function
- method
- file
- opline
- methodopline
- functionopline
- fileopline
- evalfunction
- evalfunctionopline
- evalmethod
- evalmethodopline
- evalfile
- evalopline
- eval
- opcode
- attributes:
- name: name of the symbol (function/method/file/opcode)
- disabled: empty value if enabled, non-empty if enabled
- errors (by type)
- exists: the breakpoint already exists
- maxoplines: tries to break at an opline (usedoplinenum) higher than the number of present oplines (in maxoplinenum)
- nomethod: method doesn't exist
- internalfunction: one cannot break on an opline of an internal function
- notregular: tries to set a breakpoint in not a regular file
- (invalidparameter: should not happen: is an internal error)
frame
-----
- General tag for frames is "<frame>"
- always has id attribute; if it only has id attribute, it just indicates current frame number, no other elements follow
- may contain other elements (of type <arg>) when contained in <backtrace> tag
- <arg> always contains a <stream> element, the value of the variable
### possible attributes ###
- id: the frame id, current frame has id 0 (frames with internal function calls have the same id than their called frame)
- symbol ("{main}" is root frame)
- file
- line
- internal: has value "internal" when being an internal function call (one cannot inspect that frame)
- being an error: (by type)
- maxnum: tried to access a frame with a number higher than existing (or < 0)
### attributes on <arg> ###
- variadic: has a non-empty value if the argument is variadic
- name: variable name of parameter
info (subcommands)
------------------
### break ###
- See above ("break / info break")
### files ###
- lists included files
- <includedfileinfo num="" /> with num having an integer value, indicating the number of included files
- <includedfile name=""/>: one per file, with name being the file path of the included file
### error ###
- gets last error
- <lasterror error="" (file="" line="") />
- error attribute contains the last error as a string, is empty if there's no last error
### vars / globals ###
- <variableinfo num="" /> with num having an integer value, indicating the number of (local or superglobal) variables
- if info vars was used it'll have also one of these attributes:
- method
- function
- file
- opline
- for each variable there is a <variable> followed by a <variabledetails> element
- <variable address="" refcount="" type="" name="" />
- address: pointer to zval (hexadecimal)
- refcount: refcount of zval
- type: the variable type (long, string, ...). If the value is "unknown", the other attributes are meaningless
- name: the name of the variable
- refstatus: empty if the zval is not a reference
- class: the class the object in the zval is an instance of
- resource: the type of the resource in the zval
### literal ###
- <literalinfo num="" /> with num having an integer value, indicating the number of literals, optional arguments are:
- method
- function
- file
- opline
- for each literal there is a <literal> followed by a <stream type="stdout"> which prints the value of the literal
- <literal id="" />: where id is the internal identifier of the literal
### memory ###
- Format:
<meminfo />
<current />
<used mem="" />
<real mem="" />
<peak />
<used mem="" />
<real mem="" />
- mem is an attribute whose value is a float. The memory is given in kilobytes (1 kB == 1024 bytes)
### classes ###
- <classinfo num="" /> with num having an integer value, indicating the number of loaded user-defined classes
- Each class is enumerated with first a <class>, then an optional <parents> container and then a <classsource> element
- The <parents> container contains the <class> elements of the parent of the last <class> element.
- <class type="" flags="" name="" methodcount="" />
- type: either "User" or "Internal"
- flags: either "Interface", "Class" or "Abstract Class"
- <classsource /> where the class was defined, if there are no attributes, location is unknown, usually defined by
- file
- line
### funcs ###
- <functioninfo num="" /> with num having an integer value, indicating the number of loaded user-defined functions
- Each class is enumerated with first a <function> and then a <functionsource> element
- <function name="" />
- <functionsource /> where the function was defined, if there are no attributes, location is unknown, usually defined by
- file
- line
list
----
- consists of <line> elements wrapped in a <list> container
- <list file=""> is the container element with file being the filename
- <line line="" code="" /> with value of code being the whole line of code in the line specified in the line attribute
- current: this attribute is set to "current" if that line is the line where the executor currently is
print
-----
### without a subcommand ###
- <print> elements are wrapped in a <printinfo> element
- there may be a variable number of <print> elements with a variable count of args inside the <printinfo> element
- possible args are:
- readline: yes/no - readline enabled or disabled
- libedit: yes/no - libedit enabled or disabled
- context: current executing context
- compiled: yes/no - are there actual compiled ops?
- stepping: @@ TODO (meaningless for now) @@
- quiet: on/off - should it always print the opline being currently executed?
- oplog: on/off - are oplines logged in a file?
- ops: number of opcodes in current executing context
- vars: number of compiled variables (CV)
- executing: yes/no - in executor?
- vmret: the return value of the last executed opcode
- default: continue
- 1: return from vm
- 2: enter stack frame
- 3: leave stack frame
- classes: number of classes
- functions: number of functions
- constants: number of constants
- includes: number of included files
### with a subcommand ###
- introduced by <printinfo num="" /> (except for print opline) with num being the number of opcodes and one of these args:
- file
- method
- function
- class (then also type and flags attributes, see info classes command for their meanings)
- symbol (also type and flags attributes; here the value of flags is either "Method" or "Function")
- if there is a class method, the methods are all wrapped in a <printmethods> container
- then comes a <printoplineinfo type="" /> where type is either "User" or "Internal"
- the <printoplineinfo> has either a method or a function attribute
- if the type is "Internal"
- there are no oplines, it's an internal method or function
- if the type is "User"
- it has these attributes
- startline: the first line of code where the method or function is defined
- endline: the lastt line of code where the method or function is defined
- file: the file of code where the method or function is defined
- is followed by the oplines of that method or function (<print> elements)
- <print line="%u" opline="%p" opcode="%s" op="%s" />
- in case of print opline it emits a single <opline line="" opline="" opcode="" op="" file="" />
exec
----
- command executing and compiling a given file
- <exec type="unset" context="" />: indicates unsetting of the old context
- <exec type="unsetops" />: indicates unsetting of the old compiled opcodes
- <exec type="unchanged" />: same execution context chosen again
- <exec type="set" context="" />: indicates setting of the new context
- errors by tag
- <compile>
- openfailure: couldn't open file
- compilefailure: The file indicated in context couldn't be compiled
- <exec>
- invalid: given context (attribute) is not matching a valid file or symlink
- notfound: given context (attribute) does not exist
run / <stop> tag
-------------------
- runs the script (set via exec command)
- <stop type="end" />: script execution ended normally
- (error) <stop type="bailout" /> the VM bailed out (usually because there was some error)
- compile failures see under exec, errors, <compile>
step
----
- steps by one line or opcode (as defined via set stepping) default is one line
- returns back to the executor
continue
--------
- returns back to the executor
until
-----
- temporarily disables all the breakpoints on that line until that line was left once
- returns back to the executor
finish
------
- temporarily disables all the breakpoints until the end of the current frame
- returns back to the executor
leave
------
- temporarily disables all the breakpoints past the end of the current frame and then stops
- returns back to the executor
back
----
- prints backtrace
- see frame command
ev
--
- eval()uates some code
- output wrapped in <eval> tags
sh
--
- executes shell command
- still pipes to stdout ... without wrapping <stream> !!! (@@ TODO @@)
source
------
- executes a file in .phpdbginit format
- errors by type
- notfound: file not found
register
--------
- registers a function to be used like a command
- <register function="" />: successfully registered function
- errors by type
- notfound: no such function
- inuse: function already registered
quit
----
- quits phpdbg
- if successful connection will be closed...
clean
-----
- cleans environment (basically a shutdown + new startup)
- <clean> tags wrapped in a <cleaninfo> container
- possible attributes of <clean> tag
- classes: number of classes
- functions: number of functions
- constants: number of constants
- includes: number of included files
clear
-----
- removes all breakpoints
- <clear> tags wrapped in a <clearinfo> container
- possible attributes of <clear> tag (value is always the number of defined breakpoints of that type)
- files
- functions
- methods
- oplines
- fileoplines
- functionoplines
- methodoplines
- eval
watch
-----
- watchpoints generally are identified by a variable (one may need to switch frames first...)
- <watch variable="" />, <watchrecursive variable="" /> and <watcharray variable="" /> (normal, array, recursive)
- <watch> if error, by type:
- undefined: tried to set a watchpoint on a not (yet) defined variable
- notiterable: element which is tried to be accessed as an object or array is nor array nor object
- invalidinput: generally malformed input
- <watchdelete variable="" />: when "watch delete" was used on a watchpoint
- (error) <watchdelete type="nowatch" />: that watchpoint doesn't exist, so couldn't be deleted
- for hit watchpoints etc., see Other tags, <watch*>
- when using watch list, <watchvariable> elements are wrapped in a <watchlist> container
- <watchvariable variable="" on="" type="" />
- variable: watched variable (may be a variable of another scope!)
- on: values are array or variable, depending on what is watched
- type: values are recursive or simple, depending on whether the watchpoint is checked recursively or not
set
---
- a general error is type="wrongargs" where a wrong argument was passed to a subcommand; tag is then <set*>
### prompt ###
- without other args, a <setpromt str="" /> tag is emitted where the value of the str attribute is the value of the prompt
- when there is another arg, the prompt is changed to that arg, no further xml answer
### break ###
- enables / disables a given breakpoint silently with no further xml answer
- if the boolean switch is omitted, it emits current state in a <setbreak id="" active="" /> where active is on or off
- error with type="nobreak", when no breakpoint with the given id exists
### breaks ###
- generally enables / disables breakpoint functionality silently with no further xml answer
- if the boolean switch is omitted, it emits current state in a <setbreaks active="" /> where active is on or off
### color ###
- sets the color on prompt, error or notices
- <setcolor type="" color="" code="" />: code is the color code of color, type is either:
- prompt
- error
- notice
- errors by type:
- nocolor: color doesn't exist
- invalidtype: type wasn't one of the three allowed types
### colors ###
- generally enables / disables colors silently with no further xml answer
- if the boolean switch is omitted, it emits current state in a <setcolors active="" /> where active is on or off
### oplog ###
- sets oplog
- (error) <setoplog type="openfailure" file="" /> when it couldn't open the passed file path
- <setoplog type="closingold" /> is emitted when there was a previous open oplog (and a file is passed)
- if no further argument is passed, it emits current state in a <setoplog active="" /> where active is on or off
### quiet ###
- generally enables / disables quietness silently with no further xml answer
- if the boolean switch is omitted, it emits current state in a <setquiet active="" /> where active is on or off
### setpping ###
- sets stepping to either opcode or line (so a step command will either advance one op or one line)
- if no further argument is passed, it emits current state in a <setoplog type="" /> where active is opcode or line
### refcount ###
- generally enables / disables showing of refcount in watchpoint breaks silently with no further xml answer
- if the boolean switch is omitted, it emits current state in a <setrefcount active="" /> where active is on or off
wait
----
- internally executes exec, so exec will output first (if binding to socket worked)
### attributes ###
- import: has value "success"/"fail"
- missingmodule/missingextension: modules/extensions loaded in the target SAPI, but not in phpdbg
### errors (by type) ###
- nosocket: couldn't establish socket
- invaliddata: invalid JSON passed to socket
dl
--
- loads a module or Zend extension at a given path
- if a relative path is passed, it's relative to the extension_dir ini setting
### attributes ###
- extensiontype: "Zend extension" or "module"
- name: the extension name
- path: the path where it was loaded
### errors (by type) ###
- unsupported: dynamic extension loading is unsupported
- relpath: relative path given, but no extension_dir defined
- unknown: general error with internal DL_LOAD() (for message see msg attribute)
- wrongapi: wrong Zend engine version (apineeded / apiinstalled attributes give information about the API versions)
- wrongbuild: unmatched build versions (buildneeded / buildinstalled attributes give information about the build versions)
- registerfailure: registering module failed
- startupfailure: couldn't startup Zend extension / module
- initfailure: couldn't initialize module
- nophpso: passed shared object is not a valid Zend extension nor module
- errors may have the module or extension attribute when their name is already known at the point of failure
Other tags
==========
<signal>
-----------
- received caught signal
### attributes ###
- type: type of signal (e.g. SIGINT)
### by type ###
- SIGINT: interactive mode is entered...
<watch*>
-----------
- generally emitted on hit watchpoint
- <watchdelete variable="" />: when a variable was unset, the watchpoint is removed too
- <watchhit variable="" />: when ever a watched variable is changed, followed by a <watchdata> container
- <watchdata> may contain
- for watchpoints on variables:
- each of these <watch*> tags contains a type attribute whose value is either "old" or "new")
- <watchvalue type="" inaccessible="inaccessible" />: old value is inaccessible
- <watchvalue type=""> may contain a <stream> element which indicates the old/new (type attribute) value of the variable
- <watchrefcount type="" refcount="" isref="" />: old/new (type attribute) refcount and isref, both numbers
- isref: if the value is 0, it's not a reference, else it is one
- for watchpoints on arrays:
- <watchsize> inspects size variations of an array (the sum):
- removed: number of elements removed
- added: number of elements added
- <watcharrayptr>: if this tag appears, the internal pointer of the array way changed
<signalsegv>
---------------
- generally emitted when data couldn't be fetched (e.g. by accessing inconsistent data); only used in hard interrupt mode
- it might mean that data couldn't be fetched at all, or that only incomplete data was fetched (e.g. when a fixed number of following attributes are fetched, this tag will mark a stop of fetching if none or not all tags were printed)