视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
TRACE32调试技巧
2020-11-09 07:29:51 责编:小采
文档


1.调试步骤 l连接好TRACE32-ICD和目标板,注意不要带电插拔JTAG,容易损坏TRACE32或目标板,然后依次打开TRACE32-ICD和目标板的电源。 l开启调试软件TRACE32 l设置CPU类型,状态等,可以通过命令或菜单,命令如下: sys.reset sys.CPU ARM7TDMI ;这里设置CPU

1. 调试步骤

l 连接好 TRACE32-ICD 和目标板,注意不要带电插拔 JTAG ,容易损坏 TRACE32 或目标板,然后依次打开 TRACE32-ICD 和目标板的电源。

l 开启调试软件 TRACE32

l 设置 CPU 类型,状态等,可以通过命令或菜单,命令如下:

sys.reset

sys.CPU ARM7TDMI ; 这里设置 CPU 类型

sys.up ; 启动调试,如果正常的话,状态为 system.ready; 否则会报错,需要检查 CPU 设置是否正确,TRACE32 和目标板的连接和电源是否正常

如果调试正常启动后,就可以下载编译好的文件(可以是 .elf 、 .binary 等文件)到 RAM 或 FLASH 中调试了

l 下载编译文件,命令如下:

data.load.elf E:/source/test.elf /PATH E:/source

这里的 /PATH 选项是用来指明源代码的路径,在调试时 TRACE 就可以查找到源代码了。 这里 TRACE会根据 .elf 文件里包含的目标代码起始地址加载到 RAM 的对应地址上,也可以指定加载到 RAM 的地址,但须和编译时的设置一致,否则程序不能正常运行。

注: TRACE 也可以把编译目标文件烧录到 flash 中进行调试,需要使用 flash 烧录相关命令,这里就不详述了。

l 然后就可以设置断点进行调试了,如:

break.set 0x0c008000

TRACE32 的断点有两种,一种是硬件断点(在 FLASH 中的断点),另一种是软断点(在 RAM 中的断点);硬件断点需要 CPU 的支持,如 ARM7 最多只支持 2 个硬件断点,如果使用了软断点的话,就只能使用一个硬断点了;而软断点没有,可以设置很多个。

注:在 TRACE32 中,如果要使用硬件断点,需要先设置好 FLASH 内存映射范围,如下命令:

Map.bonchip 0x0000--0xfffff ; 具体范围根据目标板 FLASH 的范围设置

l 设置好断点就可以正常调试了。

2. 源代码调试

在编译源码的时候,编译成 ( 加 -g 选项 )debug 版本的目标文件(可以是 axf/elf 等格式),用 TRACE32 就可以直接进行源代码调试了。 TRACE32 几乎支持所有的编译器的编译文件,具体格式参见 TRACE32 的帮助。 axf/elf 等编译文件也叫符号文件,即在文件中把源码的符号表(函数 / 变量等)保存下来了,供调试时使用,但里面的符号表只是起定位作用,在调试时还需要有目标源代码,否则只能进行汇编级调试,TRACE32 支持把机器码反汇编成汇编语言进行调试,而且不需要目标文件支持, TRACE32 可以自动从FLASH/RAM 中读取机器码,然后反汇编成汇编代码。

通过 data.load 命令把符号表文件 (.elf 等 ) 下载到目标机器上,指定源代码路径,就可以进行代码调试。

data.load.elf E:/source/test.elf /PATH E:/source

3. 死机定位方法

在调试产品时会碰到设备死机的情况,如下在调试过程中出现问题,可以很方便的用 TRACE 来查看问题;但如果是设备在正常运行时(没有接 JTAG 调试)出现问题或死机就比较难定位问题了;这里可以通过TRACE32 的 attach 功能来进行调试,如下:

l 把出问题的机器和 TRACE32-ICD 连接好(连接 JTAG ,测试机器需先预留 JTAG 口),然后开启TRACE32 ,设置好 CPU 类型,使用 sys.attach 命令就可以让 TRACE32 和问题机器连接上了,正常连接后, system 的状态就变成了 running 或 up 。

l 接下来可以就可以直接进行汇编级调试了。

l 但一般情况下,汇编级调试很难定位问题,需要进行源码级调试,可以按如下操作进行:先把TRACE32-ICD 和一个同问题机器同类型的机器连接好,然后把符号表文件( .elf 文件等)下载(通过data.load 命令)到好的机器上,然后再把 JTAG 线从好的机器上拔下,连接到问题机器上;然后再用sys.attach 命令让 TRACE32 和文件机器连上,这样就可以进行源码级调试了。

如果不想这么麻烦,也可以这样操作,连接好 TRACE32-ICD 和问题机器,打开 TRACE32 软件,此时system 的状态为“ system down ” , 然后通过“ data.load ”命令下载符号表文件 (.elf 等 ) ,由于 system状态为 down , TRACE32 会提示没有符号表文件没有下载成功,不用管它,因为虽然没有下载到问题机器的 RAM 上,但符号表文件已经下载到 TRACE32 上了;然后再通过 sys.attach 命令让 TRACE32和问题机器关联上,这样就可以进行源码级调试了。


下面说说怎么用trace32调试kernel.

首先讲讲硬件连接,必须保证你的trace32是连接到arm11的JTAG口上,其他连接不细说了。

打开trace32的命令窗口,并对cpu设置,如下图所示:

进入设置界面,设置如下:

然后依次输入命令“cd Z:/out/target/product/msm7627_surf/obj/KERNEL_OBJ”, "d.load.elf vmlinux /nocode",如下图所示:

之后打开符号表,查找你要debug的函数,如下图所示:

设置好断点之后,还需要进行如下设置,如图:

接着,点击go,即可进入断点,如下图:

可以看到,已经进入断点,但是一堆的汇编,怎么显示对应的c code呢?用“symbol.sourcepath.setrecursedir z:/kernel”添加路径, 如图:

最后,我们看到了正确的code,如下:

下载本文
显示全文
专题