请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】
上篇文章:ARM Coresight DS-5 系列 2 - ARM Cortex-M DS-5 Trace 使用
下篇文章:ARM Coresight DS-5 系列 4 - ARM Cortex-M DS-5 加载 ELF 文件运行
1.1 DS-5 Debug 方法梳理
通常在调试过程中需要打断点来进行单步调试,这个时候可以按照下面步骤来进行:
-
在使用 DS-5 Debug 之前需要先 load 所编译的 elf 文件:
-
设置好路径:
1.2.1 DS-5 设置断点 Debug
在上面完成 elf 文件的 load 及 路径设置后,我们就可以使用DS-5进行设置断点进行调试了。下面以 在 i2c_debug.c 中的 i2c_debug函数中
简单设置一个断点来介绍:
1.2.2 DS-5 常用 Debug 命令
1)查看寄存器命令
info registers
R0 0x200C4EDE
R1 0x000B6E24
R2 0x00000067
R3 0x00000073
R4 0xDEADBEEF
R5 0xDEADBEEF
R6 0xDEADBEEF
R7 0x200C5F58
R8 0xDEADBEEF
R9 0xDEADBEEF
R10 0xDEADBEEF
R11 0xDEADBEEF
R12 0x00000008
SP 0x200C5F58
SP_MAIN 0x2001F4C8
SP_PROCESS 0x200C5F58
LR 0x0001970F
PC 0x0005D258
xPSR 0x81010000 Nzcvq_T_inactive_0
PRIMASK 0x00000000
BASEPRI 0x00000000
FAULTMASK 0x00000000
CONTROL 0x00000006
2)查看 memory/寄存器命令
x/w 0x56020000
0x56020000: 0x00000000
3)查看函数栈
info stack
#0 rt_strcmp(cs = 0x200C4EE1 "get", ct = 0xB6E27 "set") at kservice.c:468
#1 i2c_debug_mode_help(argc = 5, mode = 0x200C4EDE "i2cget") at i2c_debug.c:64
#2 i2c_debug(argc = 5, argv = (char**) 0x200C601C) at i2c_debug.c:89
#3 _msh_exec_cmd(cmd = 0x200C4EDE "i2cget", length = 22, retp = (int*) 0x200C6078) at msh.c:342
#4 msh_exec(cmd = 0x200C4EDE "i2cget", length = 22) at msh.c:402
#5 finsh_thread_entry(parameter = (void*) 0x0) at shell.c:722
#6 _rt_thread_exit() at thread.c:105
backtrace -5
#2 i2c_debug(argc = 5, argv = (char**) 0x200C601C) at i2c_debug.c:89
#3 _msh_exec_cmd(cmd = 0x200C4EDE "i2cget", length = 22, retp = (int*) 0x200C6078) at msh.c:342
#4 msh_exec(cmd = 0x200C4EDE "i2cget", length = 22) at msh.c:402
#5 finsh_thread_entry(parameter = (void*) 0x0) at shell.c:722
#6 _rt_thread_exit() at thread.c:105
- 内存写操作
memory set 0x66020000 32 0x1
x/w 0x66020000
0x66020000: 0x00000001
上篇文章:ARM Coresight DS-5 系列 2 - ARM Cortex-M DS-5 Trace 使用
下篇文章:ARM Coresight DS-5 系列 4 - ARM Cortex-M DS-5 加载 ELF 文件运行