Trace32 查看用户态堆栈信息

1. 地址查看符号表

  y.l

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

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

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

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

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

 (3)data.load.elf  libuClibc-0.9.33.2.so 0xb6dde000 /nocode /noclear 

  (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显示用户进程调用栈 的方法进行实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值