Lauterbach GmbH (Hohenkirchen-Siegertsbrunn, Germany) has added support for debugging and profiling of the Android platform to its TRACE32 in-circuit debugger.
Device drivers, native libraries and several native applications can be debugged at the same time. For CPUs with real time trace capability, it is possible to run comprehensive run-time profiling analysis on native applications up to function and source line level, and for Dalvik applications up to thread level.
The TRACE32 in-circuit debuggers access the 'target' development board via the processor JTAG connector. Using this hardware approach to gain full control over the CPU, TRACE32 can be used to access peripherals, debug boot code and exception routines, and also has complete system visibility at any given moment.
If the CPU supports external tracing using trace ports such as ARMs ETM, then TRACE32 can record the program flow in real time. You can use the recorded trace to evaluate function nesting, run times or undertake code analysis and profiling.
As TRACE32 has JTAG-access to all areas of the processor core, device drivers (in-kernel and modules), Linux processes, native Android applications and libraries can all be debugged 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. Several Linux processes, Android applications and libraries can still be debugged 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 bottle necks can be tracked 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 is continuing to work on future enhancements of 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.
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.