zoukankan      html  css  js  c++  java
  • 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显示用户进程调用栈 的方法进行实现。

  • 相关阅读:
    java之正则表达式
    mysql之自定义函数
    mysql之replace into与 insert into duplicat key for update
    mysql之命令行导入导出
    Echarts修改legend样式
    ubuntu出现 E: Sub-process /usr/bin/dpkg returned an error code
    ubuntu总是提是E: 不能满足依赖关系。不妨试一下 -f 选项
    ubuntu安装和查看已安装软件
    放爬虫nginx
    nginx日志切割
  • 原文地址:https://www.cnblogs.com/DF11G/p/14511466.html
Copyright © 2011-2022 走看看