|Non-Confidential||PDF version||ARM DUI0446Z|
|Home > Debugging with Scripts > Jython script concepts and interfaces|
Summary of important DS-5 Debugger Jython interfaces and concepts.
The debugger module provides a Debugger class for initial access to DS-5 Debugger, with further classes, known as services, to access registers and memory. Here is an example showing the full set of module imports that are typically placed at the top of the Jython script:
from arm_ds.debugger_v1 import Debugger from arm_ds.debugger_v1 import DebugException
Most operations on DS-5 Debugger Jython interfaces require an execution context. The execution context represents the state of the target system. Separate execution contexts exist for each process, thread, or processor that is accessible in the debugger. You can obtain an execution context from the Debugger class instance, for example:
# Obtain the first execution context debugger = Debugger() ec = debugger.getCurrentExecutionContext()
You can access processor registers, coprocessor registers and peripheral registers using the debugger Jython interface. To access a register you must know its name. The name can be obtained from the Registers view in the graphical debugger. The RegisterService enables you to read and write register values, for a given execution context, for example:
# Print the Program Counter (PC) from execution context ec value = ec.getRegisterService().getValue('PC') print 'The PC is %s' %value
You can access memory using the debugger Jython interface. You must specify an address and the number of bytes to access. The address and size can be an absolute numeric value or a string containing an expression to be evaluated within the specified execution context. Here is an example:
# Print 16 bytes at address 0x0 from execution context ec print ec.getMemoryService().read(0x0, 16)
The debugger jython interface enables you to execute arbitrary DS-5 commands. This is useful when the required functionality is not directly provided in the Jython interface. You must specify the execution context, the command and any arguments that you want to execute. The return value includes the textual output from the command and any errors. Here is an example:
# Execute the DS-5 command 'print $ENTRYPOINT' and print the result print ec.executeDSCommand('print $ENTRYPOINT')
The methods on the debugger Jython interfaces throw DebugException whenever an error occurs. You can catch exceptions to handle errors in order to provide more information. Here is an example:
# Catch a DebugException and print the error message try: ec.getRegisterService().getValue('ThisRegisterDoesNotExist') except DebugException, de: print "Caught DebugException: %s" % (de.getMessage())
For more information on DS-5 Debugger Jython API documentation select Help Contents from the Help menu.