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:\RD\Trace32\0511\dnsmasq.elf /nocode /noclear  (dnsmasq.elf 文件編譯時已包含偏移地址0x8000,此時不需要再指定偏移)

     data.load.elf E:\RD\Trace32\0511\libuClibc-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顯示用戶進程調用棧 的方法進行實現。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM