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
4)内存写操作
memory set 0x66020000 32 0x1
x/w 0x66020000
0x66020000: 0x00000001