src/debug.c - Parrot debugging
This file implements Parrot debugging and is used by pdb
,
the Parrot debugger,
and the debug
ops.
static const char *nextarg
- Returns the position just past the current argument in the PASM instruction
command
.
This is not the same as skip_command()
,
which is intended for debugger commands.
This function is used for eval
.
static const char *skip_ws
- Returns the pointer past any whitespace.
static const char *skip_command
- Returns the pointer past the current debugger command.
(This is an alternative to the
skip_command()
macro above.)
static const char *parse_int
- Parse an
int
out of a string and return a pointer to just after the int
.
The output parameter intP
contains the parsed value.
static const char *parse_string
- Parse a double-quoted string out of a C string and return a pointer to just after the string.
The parsed string is converted to a Parrot
STRING
and placed in the output parameter strP
.
static const char *parse_key
- Parse an aggregate key out of a string and return a pointer to just after the key.
Currently only string and integer keys are allowed.
static const char *parse_command
- Convert the command at the beginning of a string into a numeric value that can be used as a switch key for fast lookup.
void PDB_get_command
- Get a command from the user input to execute.
- It saves the last command executed (in
pdb->last_command
),
so it first frees the old one and updates it with the current one.
- Also prints the next line to run if the program is still active.
- The user input can't be longer than 255 characters.
- The input is saved in
pdb->cur_command
.
void PDB_script_file
- Interprets the contents of a file as user input commands
int PDB_run_command
- Run a command.
- Hash the command to make a simple switch calling the correct handler.
void PDB_next
- Execute the next N operation(s).
- Inits the program if needed,
runs the next N >= 1 operations and stops.
void PDB_trace
- Execute the next N operations; if no number is specified,
it defaults to 1.
PDB_condition_t *PDB_cond
- Analyzes a condition from the user input.
void PDB_watchpoint
- Set a watchpoint.
void PDB_set_break
- Set a break point,
the source code file must be loaded.
void PDB_init
- Init the program.
void PDB_continue
- Continue running the program.
If a number is specified,
skip that many breakpoints.
PDB_breakpoint_t *PDB_find_breakpoint
- Find breakpoint number N; returns
NULL
if the breakpoint doesn't exist or if no breakpoint was specified.
void PDB_disable_breakpoint
- Disable a breakpoint; it can be reenabled with the enable command.
void PDB_enable_breakpoint
- Reenable a disabled breakpoint; if the breakpoint was not disabled,
has no effect.
void PDB_delete_breakpoint
- Delete a breakpoint.
void PDB_delete_condition
- Delete a condition associated with a breakpoint.
void PDB_skip_breakpoint
- Skip
i
times all breakpoints.
char PDB_program_end
- End the program.
char PDB_check_condition
- Returns true if the condition was met.
char PDB_break
- Returns true if we have to stop running.
char *PDB_escape
- Escapes
"
,
\r
,
\n
,
\t
,
\a
and \\
.
- The returned string must be freed.
int PDB_unescape
- Do inplace unescape of
\r
,
\n
,
\t
,
\a
and \\
.
size_t PDB_disassemble_op
- Disassembles
op
.
void PDB_disassemble
- Disassemble the bytecode.
long PDB_add_label
- Add a label to the label list.
void PDB_free_file
- Frees any allocated source files.
void PDB_load_source
- Load a source code file.
char PDB_hasinstruction
- Return true if the line has an instruction.
- RT#46129:
- This should take the line,
get an instruction,
get the opcode for that instruction and check that is the correct one.
- Decide what to do with macros if anything.
void PDB_list
- Show lines from the source code file.
void PDB_eval
eval
s an instruction.
opcode_t *PDB_compile
- Compiles instructions with the PASM compiler.
- Appends an
end
op.
- This may be called from
PDB_eval
above or from the compile opcode which generates a malloced string.
int PDB_extend_const_table
- Extend the constant table.
static void dump_string
- Dumps the buflen,
flags,
bufused,
strlen,
and offset associated with a string and the string itself.
void PDB_print_user_stack
- Print an entry from the user stack.
void PDB_print
- Print interp registers.
void PDB_info
- Print the interpreter info.
void PDB_help
- Print the help text.
"Help" with no arguments prints a list of commands.
"Help xxx" prints information on command xxx.
void PDB_backtrace
- Prints a backtrace of the interp's call chain.
static const char *GDB_print_reg
- Used by GDB_P to convert register values for display.
Takes register type and number as arguments.
- Returns a pointer to the start of the string,
(except for PMCs,
which print directly and return "").
static const char *GDB_P
- Used by PDB_print to print register values.
Takes a pointer to the register name(s).
- Returns "" or error message.
static int GDB_B
- Inserts a break-point into a table (which it creates if necessary).
Takes an instruction counter (?).
- Currently unused.
- Returns break-point count,
or -1 if point is out of bounds.
include/parrot/debug.h,
src/pdb.c and ops/debug.ops.
- Initial version by Daniel Grunblatt on 2002.5.19.
- Start of rewrite - leo 2005.02.16
- The debugger now uses its own interpreter.
User code is run in Interp *debugee.
We have:
debug_interp->pdb->debugee->debugger
^ |
| v
+------------- := -----------+
- Debug commands are mostly run inside the
debugger
. User code runs of course in the debugee
.