In this course attendees will learn how to debug and profile embedded Android systems.
The following topics will be covered:
- Introduction to software debugging, the software debugging process, main types of problems and debugging mechanisms, tools and techniques for debugging and profiling Linux and Android systems.
- Introduction to debugging applications with GDB, basic commands, execution control, breakpoints, watchpoints, catchpoints, printing variables and expressions, displaying memory, the stack backtrace, TUI mode, integration with DDD and Eclipse.
- The development platform that will be used in training, hardware features, references and documentation.
- Linux kernel documentation, debugging the Linux kernel, logging techniques (printk, dynamic debug), collecting information from virtual filesystems (procfs, sysfs, configfs, debugfs), kernel crash messages analysis (oops and panic), using the addr2line tool, debugging kernel modules, kdump, pstore.
- Static probes (tracepoints, trace_events), dynamic probes (kprobes), tools and tracing techniques (ftrace, trace-cmd, kernelshark, LTTng, systemtap), tracing functions, latency times and stack consumption.
- Interactive Linux kernel debugging with GDB (KGDB, gdbclient and agent-proxy), using the KDB front-end, debugging at the hardware level with JTAG.
- Linux kernel debugging frameworks, memory leak detection in the kernel (kmemleak), magic sysrq key, deadlock detection in the kernel.
- Tools and logging techniques in the native layer (syslogd, klogger, logcat, dumpstate, bugreport), debuggerd, crash analysis on applications and native libraries, coredump, tombstones, analyzing problems in dynamic libraries.
- Tracing tools for applications in the native layer, strace, ltrace, ld.so, etrace, uprobe, perf, systemtap, LTTng-ust.
- Remote debugging with gdbserver, debugging multithreaded applications.
- Debugging memory usage in native applications, memory usage analysis tools (free, procrank, procmem, showmap, librank), debugging memory leak with valgrind, memwatch, mtrace, dmalloc.
- Tools and logging techniques in the Java layer (logcat, dumpsys, dumpstate, ANR), crashes analysis in Java layer, tracing tools (systrace, apitrace), integration of the AOSP source code and debugging framework services on Android Studio, DDMS, command-line tools that can assist in debugging (am, pm, wm, svc, service).
- Linux and Android profiling, CPU consumption analysis (top, cpustats, schedtop), memory consumption analysis (free, procrank, procmem, showmap, librank, meminfo), performance analysis with perf and oprofile, profiling applications with strace, ltrace and gprof, profiling Java applications with traceview and systrace.
The slides of this training session are released under the Creative Commons BY-SA 3.0 license, and the source code can be found here.
Some pictures of training sessions already presented are available here.
Students, engineers and software developers of embedded systems based on the Android operating system.
Attendees should know the basics of the GNU/Linux command line interface, development of embedded Linux and Android) systems, intermediate knowledge on developing programs in C, C++ and Java, and compiler tools like gcc and make.
All required development tools and equipment will be provided by Embedded Labworks.
The course material contains the slides of the presentations, book of activities and exercises, reference guides, and additional reference documents. All materials will be provided in an electronic format at the start of the training session.
The open training sessions are presented in a pleasant environment, with a properly equipped laboratory and Internet access. Classes are usually presented full time, with a stop for lunch and a coffee break in the morning.
If you are interested in participating in the training but there is no open session available, please fill the pre-registration form clicking here. We will contact you as soon as a new training session is opened.
If you plan to train your team or a group of people, consider a training session in your company.
In-company classes have the same characteristics of an open training session. In this model, the company is responsible for providing the necessary resources needed for the training, including room, data projector and development machines. This model also brings big advantages for the company, since the cost of transportation and accommodation of several employees is reduced only to the instructor.
If your company has a special requirement, we can study a program that meets your needs in a specific way, like preparing the training material for a specific hardware platform or developing additional content. Do not hesitate to contact us by e-mail or leaving a message in the contact page.
Take the training to your city
You can take the training session to your community at any city in Brazil!
Can't afford to take the course in São Paulo? Do you have a study group and want to learn more about a specific technology? Do you coordinate or participate in the coordination of a course at your university and would like to train the teachers and students? Do you have a space and would like to get some friends together and spend enjoyable hours learning about embedded systems?
Send an e-mail or leave a message in the contact page. Send the name of the course you are interested and the city. If we can get together a group of interested people, we can bring the training to your city!