<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>PDA Debugger Protocol Reference</title> </head> <body> <h2>PDA Debugger Protocol Reference</h2> <h3>clear</h3> Clears any breakpoint set on given line <pre> C: clear {line} R: ok </pre> <h3>data</h3> Retrieves data stack information <pre> C: data {thread_id} R: {value 1}|{value 2}|{value 3}|...| Errors: error: invalid thread </pre> <h3>drop</h3> Returns from the current frame without executing the rest of instructions. <pre> If VM running: C: drop {thread_id} R: ok E: resumed {thread_id} drop E: suspended {thread_id} drop If VM suspended: C: drop {thread_id} R: ok E: vmresumed drop E: vmsuspended {thread_id} drop Errors: error: invalid thread </pre> <h3>eval</h3> Sets what events cause the execution to stop. <pre> C: eval {thread_id} {instruction}%20{parameter}|{instruction}%20{parameter}|... R: ok E: resumed {thread_id} client E: evalresult result E: suspended {thread_id} eval Errors: error: invalid thread error: cannot evaluate while vm is suspended error: thread running </pre> <h3>eventstop</h3> Sets what events cause the execution to stop. <pre> C: eventstop {event_name} {0|1} R: ok ... E: suspended event {event_name} </pre> <h3>exit</h3> Instructs the debugger to exit. <pre> C: exit R: ok </pre> <h3>popdata</h3> Pops the top value from the data stack <pre> C: popdata {thread_id} R: ok Errors: error: invalid thread </pre> <h3>pushdata</h3> Pushes the given value on top of the data stack. <pre> C: pushdata {thread_id} {value} R: ok Errors: error: invalid thread </pre> <h3>resume</h3> Resumes the execution of a single thread. Can be issued only if the virtual machine is running. <pre> C: resume {thread_id} R: ok E: resumed {thread_id} client Errors: error: invalid thread error: cannot resume thread when vm is suspended error: thread already running </pre> <h3>set</h3> Sets a breakpoint at given line <pre> Suspend a single thread: C: set {line_number} 0 R: ok C: resume {thread_id} E: resumed {thread_id} client E: suspended {thread_id} breakpoint line_number Suspend the VM: C: set {line_number} 1 R: ok C: vmresume E: vmresumed client E: vmsuspended {thread_id} breakpoint line_number </pre> <h3>setdata</h3> Sets a data value in the data stack at the given location <pre> C: setdata {thread_id} {index} {value} R: ok Errors: error: invalid thread </pre> <h3>setvar</h3> Sets a variable value <pre> C: setvar {thread_id} {frame_number} {variable} {value} R: ok Errors: error: invalid thread </pre> <h3>stack</h3> Retrieves command stack information <pre> C: stack {thread_id} R: {file}|{line}|{function}|{var_1}|{var_2}|...#{file}|{line}|{function}|{var_1}|{var_2}|...#... Errors: error: invalid thread </pre> <h3>step</h3> Executes next instruction <pre> If VM running: C: step {thread_id} R: ok E: resumed {thread_id} client E: suspended {thread_id} step If VM suspended: C: step {thread_id} R: ok E: vmresumed client E: vmsuspended {thread_id} step Errors: error: invalid thread </pre> <h3>stepreturn</h3> Executes instructions until the current subroutine is finished <pre> If VM running: C: stepreturn {thread_id} R: ok E: resumed {thread_id} client E: suspended {thread_id} step If VM suspended: C: stepreturn {thread_id} R: ok E: vmresumed client E: vmsuspended {thread_id} step Errors: error: invalid thread </pre> <h3>suspend</h3> Suspends execution of a single thread. Can be issued only if the virtual machine is running. <pre> C: suspend {thread_id} R: ok E: suspended {thread_id} client Errors: error: invalid thread error: vm already suspended error: thread already suspended </pre> <h3>threads</h3> Retrieves the list of active threads <pre> C: threads R: {thread id} {thread id} ... </pre> <h3>var</h3> Retrieves variable value <pre> C: var {thread_id} {frame_number} {variable_name} R: {variable_value} Errors: error: invalid thread error: variable undefined </pre> <h3>watch</h3> Sets a watchpoint on a given variable <pre> C: watch {function}::{variable_name} {watch_operation} R: ok C: resume R: resumed client E: suspended watch {watch_operation} {function}::{variable_name} </pre> The <code>watch_operation<code> value can be: <ul> <li>0 - no watch</li> <li>1 - read watch</li> <li>2 - write watch</li> <li>3 - both, etc.</li> </ul> <h3>vmresume</h3> Resumes the execution of the whole virtual machine <pre> C: vmresume R: ok E: vmresumed client Errors: error: vm already running </pre> <h3>vmsuspend</h3> Suspends the execution of the whole virtual machine <pre> C: vmsuspend R: ok E: vmsuspended client Errors: error: thread already suspended </pre> </body> </html>