Design
TRACE32 Supports Debugging and Profiling of Android Platforms
Android is an open source mobile phone operating system, originally published by Google. Based on a standard Linux kernel it adds several specialized middleware-components and a software stack for smartphones. Android comes with its own virtual machine called Dalvik, which runs optimized bytecode generated from Java source. Applications built for Android can either be written in native-code languages like C/C++, in Java for Dalvik, or in a combined mode where Dalvik applications use a native library.
TRACAs TRACE32 has JTAG-access to all areas of the processor core, you can debug device drivers (in-kernel and modules), Linux processes, native Android applications and libraries - and all of these at the same time. No special debug software is required on the target: the debug information generated during target software compile time provides the additional information that is not available via the JTAG. This is called stop mode debugging as the complete system (including the kernel) will halt when a debug breakpoint is reached.
Sometimes, however, some processes must be kept running (e.g. device drivers) whilst debugging an application. This is called run mode debugging and requires a small debug server to be loaded on the target. You can still debug several Linux processes, Android applications and libraries all at the same time, but normally it is not possible to debug device drivers in run mode debugging. A special case is simultaneous co-debugging of native-code components with TRACE32 whilst also debugging Dalvik applications within the Android framework. The framework uses a special debug bridge to connect to the Dalvik application running on the target, this bridge maintains communication under run mode debugging conditions.
If the target supports real-time trace capability, the recorded program flow contains detailed information about the application component run times. TRACE32 creates a comprehensive profiling analysis that shows which application, library or device driver took most CPU time. For native-code components you can track bottle necks down to function and even to source line level. Timing diagrams show the functional flow, and process/thread switches. Dalvik applications can be analysed up to the Java thread level.
Lauterbach continues to work on future enhancements TRACE32 which will further improve Android platform support. In the longer term, Dalvik based Java debugging will be completely integrated into the TRACE32 debug environment.