[原创] 【CC1352P测评】GDB调试CC1352的波折

cruelfox   2019-6-23 11:28 楼主

  起因还是我开发环境的问题,而我又固执地要用纯GNU工具来搞(CCS慢且有问题,IAR曾经申请license都没用成功,不想折腾了),所以进展一再受阻。尽管在我通过CCS获得了 gdb_agent_console 所需要的 "board data file",可以脱离CCS直接支持 GDB 调试,而且能在 xp 系统下运行 gdb_agent_console 了,仍然存在问题。

  在我装 win7 的 laptop 上,运行 gdb_agent_console 并用 gdb 连接它之后,在调试过程中(单步执行)可能会出现和板子连接的故障,需要CC1352复位,就没法继续调试了。于是我试在 xp 的电脑上用 TI Emupack 里面的 gdb_agent_console 来支持调试(缺的文件从CCS那里复制过来),是可以运行的,没有连接板子的故障。

  CC13x2 的 SDK 代码是预先编译好,以二进制库形式被工程引用。我在用 GDB 进行跟踪的时候就遇到源文件找不到的错误,不能显示当前执行指令对应到C代码的什么地方(只有行号和文件名,也可以自己查),可能是TI编译库的环境下路径和我调试环境不同造成的,这个问题对 GDB 调试来说只是有些不方便罢了。

  我之前用 GDB 调试发现了 SDK 版本不合适所以程序自锁,更换 SDK 解决问题之后,再继续跟踪执行过程,发现在执行到 main() 之前,会执行到 0x10000000 地址以后的代码——明显并非烧写的程序,应该是 ROM 中的程序了,虽然 CC1352 datasheet 没有说 ROM 地址范围。我想找找从哪里调用了 ROM 中的代码,重来一次调试,下断点,就遇到了问题。

(gdb) target remote localhost:55000
Remote debugging using localhost:55000
0x10000592 in ?? ()
(gdb) monitor reset
CPU has been reset
(gdb) b localProgramStart
Breakpoint 1 at 0x63a4: file startup/startup_cc13xx_cc26xx_gcc.c, line 163.
(gdb) c
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x63a4: (undocumented errno -1).

(gdb) si
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x63a4: (undocumented errno -1).

  不能设置断点?在 gdb_agent_console 这变的出错信息是:

Target connected...Starting server
FAILED! GTI_SETBP_EX(hpid=001F1D48,addr=0x63a4,type=0,count=1,access=0)=ffffffff

(Error -1066 @ 0x63A4)
Unable to set/clear requested breakpoint. Verify that the breakpoint address is in valid memory.
(Emulation package 8.1.0.00005)

Exception trying to set hwbp through ctools (address=0x63a4): Error enabling this function: There is no AET resource to support this job.
ERROR: set_breakpoint() backend call returned 65

  看来调试器出了问题。我在网上搜索,没有找到解答。

  不能用 GDB 下断点,每次都从头开始单步调试就很烦琐了。然后我又发现了,不仅是 GDB 的 b 命令不能用,单条语句执行的 n 命令、跳出函数的 finish 命令都不能用——想想也是可能,这些背后还是得靠断点功能吧。只有单条指令执行的 si 命令可以用,这也是我一开始就用的。

  只能用单步执行指令调试,这样效率太低了,于是卡壳很久……

 

  后来,我想想,会不会是软件的问题呢?我又在 win7 电脑上运行 gdb_agent_console 测试下 GDB 断点功能。尽管 "Unable to set/clear requested breakpoint" 信息还出现,后面 "Exception trying to set hwbp ..." 信息没有了,GDB也确实可以单条C语句执行!

  我注意到 Emulation package 的版本是不一样的。于是我把那边 ccs_base 里相关的目录 copy 到 xp 电脑上,运行同样的 gdb_agent_console, 却照样是问题。莫非 XP 和 win7 差异?

  我那 win7 的电脑也可以运行 xp, 于是我切换了系统,在 xp 下安装上 XDS110 的驱动之后,执行 CCS 目录里面的 gdb_agent_console,用 GDB 调试一下,的确不能用断点。这要么是 CCS 安装时在系统里还加了东西,要么是 emupack 对 XP 的支持就存在问题……

  或许只能忍忍,用 win7 电脑来运行 gdb_agent_console, 用网络连接调试了。

 

  提示信息里的 ctools 是个啥?我在 ccs_base\emulation\analysis\bin 目录下找到了名称含有 ctools 字样的 DLL, 干脆挪走,看程序报什么样的错。结果呢,居然 gdb_agent_console 正常启动,GDB 还能连上。关键的,b 命令居然成功了。我注意到,原来 gdb_agent_console 有一行提示信息

Using ctools hardware breakpoint support.

现在变成了

Using driver hardware breakpoint support.

  于是,把 ctools 功能给阻止掉,它就用驱动程序提供的硬件断点,好歹能使断点了。


此内容由EEWORLD论坛网友cruelfox原创,如需转载或用于商业用途需征得作者同意并注明出处

回复评论 (3)

这段操作实在是太不容易了。。辛苦啦

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2019-7-7 22:20
更多的时候我觉得我遇到这样问题可能直接就放弃了
点赞  2019-7-7 22:21

辛苦啦,不错的分享。

点赞  2019-7-8 08:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复