Lauterbach TRACE32使用技巧记录

1. 按地址查看符号表

  y.list

2. Linux显示用户进程调用栈

一般情况下我们加载dump或者在线attach时只加载了Linux Kernel的符号表(vmlinux),此时只能看到内核空间的调用栈关系,如下图:

 如果想显示用户空间的调用栈关系,可以这么做:

(1)点开菜单Linux->Display Processes,在任务列表里面找到当前的任务,点击右键选择Display Detailed,打开如下窗口:

 (2)在code file选项卡中可以看到:libuClibc的开始地址为0xb6dde000,其它库文件的地址也都一起列了出来;

 (3)加载dnsmasq主进程符号表 与 libuClibc 符号表

   data.load.elf E:RDTrace32511dnsmasq.elf /nocode /noclear  (dnsmasq.elf 文件编译时已包含偏移地址0x8000,此时不需要再指定偏移)

     data.load.elf E:RDTrace32511libuClibc-0.9.33.2.so 0xb6dde000 /nocode /noclear   (so文件为使用uClibc-0.9.33.2进行交叉编译后得到的elf文件)

  (4)一般情况下加载上面两项后即可以看到用户进程的调用栈关系,如果有的地址还是无法解析,可以进一步加载对应地址的库文件的符号表。

 3. Linux切换用户进程

一般情况下我们加载dump或者在线attach后只能看到当前用户进程的调用栈信息,如果想看其他任务的调用栈关系,可以这么做:

(1)点开菜单Linux->Display Processes,在任务列表里面找到当前的任务,点击右键选择Display Task Struct,打开如下窗口:

 (2)读取该进程的一级页表基地址即PGD,具体路径为(task_struct) ->mm->pgd,得到PGD的虚拟地址;

 (3)根据内核空间虚拟地址和物理地址的映射关系,将PGD转换为物理地址,例如映射关系为(0xc0000000<-->0x22300000),那么该PGD的物理地址为0x243e0000;

   (4)   将转换后的PGD 物理地址写入TTBR0的基地址段([31:10]):

      

(5)  回到第一步的任务列表,右键点击要切换的目的任务,选择Switch Context, 此时就能看到该任务的调用栈关系:

 (6) 如果还要进一步查看用户空间的调用栈关系,可以继续按照 Linux显示用户进程调用栈 的方法进行实现。

原文地址:https://www.cnblogs.com/DF11G/p/14511466.html