Debugging an embedded Linux product is a common task not only during development, but also in deployed production systems.
Application debugging in embedded Linux is different from debugging in a traditional embedded device in that we don't have a flat memory model with an operating system and applications sharing the same address space. Instead, we have a virtual memory model with the Linux operating system sharing the address space, and assigning virtual memory areas to running processes.
With this model, the mechanisms used for kernel and user space debugging differ. For example, the traditional model of using a JTAG-based hardware debugger is useful for kernel debugging, but unless it knows about the user space process' memory mapping, it will not be able to debug user space applications.
Application debugging is approached with the use of a user space...