基于Trace32查看Linux进程栈调用关系
1. 打开进程列表
点击菜单Linux->Display Process,即可查看所有进程列表。
2. 加载的可执行文件和库文件符号表
在感兴趣进程,右击选择:
- Display Stack Frame:最开始Stack都是由一串地址组成的。
- Display maps:提供了地址范围和可执行文件/库文件对应关系。
由以上两者可知需要加载哪些可执行文件和库文件。
点击Linux->Process Debugging->Load Symbols选择合适的可执行文件。点击Linux->Library Debugging->Load Symbols,填写Process name并选择合适的库文件。需要注意:
- 可执行文件名称需要和Process name一致。对于软链接到busybox的可执行文件,需要将busybox拷贝重命名。
- 尽量选用"with debug_info, not stripped"的文件。可以通过file命令确认。
3. 重新加载内核符号表
对于内核符号表加载,需要进行SpaceID的重映射:
data.load.elf ../vmlinux <PID>:0x0 /NoCODE /NoClear /StripPART <Replace path>
注意PID需要将PID号使用十六进制表示0xXX。
在将可执行文件、库文件、vmlinux都加载成功后,进程的栈显示了全部符号表。
联系方式:arnoldlu@qq.com