meta data for this page
GDB
Starting
gdb <executable> gdb --args <executable> arg1 arg2 arg3 gdb -x gdbcommands --init-commands=gdb-openocd.cfg
Symbols and paths
Add symbols:
symbol-file /mnt/nfs/binary-with-symbols.elf dir /mnt/nfs/src
Using
getting info
set print pretty on
- p[rint] <name> - print value
- p * <name> - print what is pointed by
- p/x <name> - print in hex format
- p <name> @<n> print <n> values starting at <name>
- p <chars> <TAB> - List all variables starting with <chars>
- p ((sturct dummy*)variable)[0] - Dump structure members
- ptype var
- x /100bx m - eXamine memory located by variable m, print 100 bytes in hex format
- bt (backtrace)
- t (threads)
call stack
- bt (backtrace)
- frame 4 - switch to frame #4
- up
- down
breakpoints
- b[reak] malloc
- b mall <TAB> - List all starting with mall
- clear malloc
- info break
- i[nfo] b
- dis[able] 1 - disable brakpoint 1
- en[able] 1
- d[elete] 1
- d 1 2
- d - delete all breakpoints
- cond[ition] 1 <expr> - stop at breakpoint 1 only if <expr> is true
- cond 1 - Remove condition from breakpoint 1
stepping
- s [tep] - step to next source line
- c [ontinue] <num_to_ignore>
- n [ext] - step (do not enter to subroutines)
- fin [ish] - execute until stack frame returns
- u [ntil] <line number> - execute to line (to avoid loops)
infos
- show debug-file-directory
threads
- info threads - show info about threads
- thread 4 - switch to thread 4
- print mutex
- info line - print current code line
- frame - print current execution position and code
OpenOCD
Disable Cortex M0 interrupts
- mon cortex_m maskisr on
set remote hardware-breakpoint-limit 4 set remote hardware-watchpoint-limit 2 define hook-step mon cortex_m maskisr on end define hookpost-step mon cortex_m maskisr off end
gdbcommands file
- gdbcommands
set verbose on set auto-load safe-path / set debug auto-load on set sysroot /home/user/prj/buildroot/output/target source ../../interactive/src set substitute-path /usr/sbin/app /apps/app/app add-symbol-file /home/user/prj/stm32/main/bootloader/build/bin/main.elf 0x08005000 dir ../../out/build/app-undefined dir ../../out/build/app-undefined/apps/app dir ../../out/build/app-undefined/apps/app/app set substitute-path /usr/lib ../../out/target/usr/lib set args -m 0 -c /etc/conf.d/conf.xml #sharedlibrary #target extended-remote 192.168.1.62:12345 break myFunction
- gdb-openocd.cfg
target extended-remote localhost:2331 #monitor reset monitor halt # Setup GDB FOR FASTER DOWNLOADS #set remote memory-write-packet-size 1024 #set remote memory-write-packet-size fixed
# Add GDB access to mem range where VTOR is located mem 0xE0000000 0xE00FFFFF define bootapp monitor reset halt # Adjust VTOR (Vector table offset register) set {int}0xE000ED08 = &exception_table # Set SP/PC to the values from the actual vector table set $sp = *(int*)&exception_table set $pc = *((int*)(&exception_table)+1) end
symbols
- set symbol-reloading on
- add-symbol-file ~/mymodule.o 0xd8be4000
- add-symbol-file ~/myanother.o 0x12341234
- set debug-file-directory <directory> - set directory contain symbol file
- show debug-file-directory
file paths and libraries
- set verbose on
- set auto-load safe-path /
- info shared
- set sysroot /home/niziak/n/3/out/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot
source paths
Search paths (prefixes):
- dir /path/to/src1
- dir /path/to/lib/src2
Translate beginning of paths:
- set substitute-path /usr/lib ../../out/target/usr/lib
Kernel OOPS
Reading
PC is at RTMPCheckEtherType+0x90/0x4d4 [mt7601Uapsta] LR is at RTMPCheckEtherType+0x34/0x4d4 [mt7601Uapsta] Code: e59f3418 e0256593 e2859d43 e289902c (e5d939ba)
Oops occurs at offset 0x90 from RTMPCheckEtherType. 0x4d4 is length. “Code” line shows last instruction. Instruction in bracket is problematic instruction (at RTMPCheckEtherType+0x90)
Tracing
Disassembly kernel binary or module binary: objdump -dS vmlinux > /tmp/kernel.s and look into generated code.
Python
apt-get install gdb python2.7-dbg
gdb python <pid>
DRAFTS
call raise(kernel-thread-id, signo) or call pthread_kill(pthread-thread-id, signo).