vxworks实时系统的函数调用栈回溯

MIPS的栈回溯实例

1. 使用i命令查看需要回溯的任务ID

选择任务tNetConf的任务id: 0xc1c747d0

2. 使用ti命令查看任务信息(ti 0xc1c747d0)

主要是获取sp栈地址和sp栈大小,pc和ra的值

SP:0xc1c76030 SP大小6144

pc = c04789e4

ra = 0 (一般情况下不是0,我这里刚好是)

3. 使用d命令查看SP栈中的内容(d 0xc1c76030,128,4这里只查看128个单位的大小,总大小不要超过SP大小6144就可以了)

第三列c0xxxxxx中的地址找出来,顺序不要改变(为什么选择第三列和选择c0开头的地址,后面再详细说明)

4. 使用反汇编命令,但记得添加-D选项(objdumpmips.exe –xthD vxWroks > vxWroks.txt)

命令工具在以下目录C:\WindRiver\gnu\4.3.3-vxworks-6.9\x86-win32\bin

上图只是使用PC:c04789e4做的示范,使用文本的搜索功能,找到函数地址,然后向上找到函数名,其他地址也是类似(如果遇到不能找到的地址或者可以找到地址但是向上不能找到函数名的可以直接跳过此地址)

  • pc c04789e4    semBTake
  • ra 0                 跳过
  • c047a438       semTake
  • c0620b1c       ipcom_block_wait
  • c07598b8       ipnet_pipe_recv_with_tmo
  • c0759948       ipnet_pipe_recv
  • c05f2874       ipnet_usr_sock_pipe_recv
  • c05f4554       ipnet_usr_sock_wait_until
  • c05f4798       ipcom_recvmsg
  • c05f48c4       ipcom_recvfrom

上面是根据第3步中的地址找出来的函数,函数的调用关系为

ipcom_recvfrom ---> ipcom_recvmsg--->

ipnet_usr_sock_wait_until---> ipnet_usr_sock_pipe_recv--->

ipnet_pipe_recv---> ipnet_pipe_recv_with_tmo---> ipcom_block_wait--->

semTake---> semBTake

以上是回溯的基本过程,如果回溯RTP或者有动态库之类的会稍微麻烦一些。

MIPS栈回溯的原理

(以后更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不是一个人的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值