**Linux Debugging**
^ Reference | {{:mywiki:linux:linux_debugging_techniques.ppt|}} |
====== Linux Debugging with LauterBach ======
===== Basic requirement =====
In order to support c source code level debugging, it is a must to enable debugging option during compile
==== Get source code directory base ====
mips-openwrt-linux-objdump -g vmlinux | grep -i DW_AT_comp_dir | grep -i indirect | grep '\/'
Its output is like:
DW_AT_comp_dir : (indirect string, offset: 0x171): /disk/fs1/tmp2/openwrt/core/kernel_tree
==== Discover entry point in ELF ====
* Discover vmlinux entry point
mips-openwrt-linux-objdump -t vmlinux | grep -w "_text"
Its output in my setup: **60020000 g .text 00000000 _text **
* Discover kernel_entry
mips-openwrt-linux-objdump -f vmlinux
Its output in my setup: **start address 0x6002df00**
==== Generate system.map ====
mips-openwrt-linux-nm -n vmlinux | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)' > System.map
=== Get one symbol's address ===
mips-openwrt-linux-objdump -t vmlinux | grep dp_xmit
===== Lauterbach/Debugger =====
==== Load symbol from linux PC via networking ====
Suppose below working environment:
| Linux Compilation folder via [[linux_debugging_with_lauterbach#get_source_code_directory_base|method]] | /disk/fs1/tmp2/shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree |
| vmlinux folder | /disk/fs1/tmp2/shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree |
| samba mapping folder to windows | X:\tmp2\shaoguoh\project\ugw61_grx500\openwrt\core\kernel_tree |
Lauterbach command:
d.load.elf "X:\tmp2\shaoguoh\project\ugw61_grx500\openwrt\core\kernel_tree\vmlinux" /strippart "/disk/fs1/tmp2" /path "X:\tmp2" /nocode
Note:
* /strippart : remove the directory prefix in the elf's debugging source file's
* /path: change to samba folder
* /nocode: don't load code, but symbol only
**Example**:
If the location of one file in vmlinux debugging as below:
/disk/fs1/tmp2/shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree/t.c
After /strippart "/disk/fs1/tmp2", ie, strip the prefix as specified here, it become:
shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree/t.c
After /path "X:\tmp2", ie, add prefix as specified here, it become:
X:\tmp2\shaoguoh/project/ugw61_grx500/openwrt/core/kernel_tree/t.c
With this folder, now debugger can access this file via samba from windows
====== Linux Kernel Debugging Tools ======
===== Enable kernel debug to detection lock/context issue =====
In openwrt/core, run: make kernel_menuconfig
In kernel_hack, enable below items:
{{:mywiki:linux:kernel_hack.jpg|}}