即使数据类型不同,是否有可能将frame的参数作为参数传递给backtrace中的另一个帧

问题描述 投票:0回答:1

在我的应用程序中,在vxWorks上部署了backtrace(在xrtc文件上生成)后生成:

 d475c (Frame 1) process_host_invoke+274: d3bac (ffffff00, 3e8)
 d3cac (Frame 2) stop_feature_monitor+904: receive_invoke_reply ()
 d0318 (Frame 3) receive_invoke_reply+7c : wait_reply_msg (3e8, 7950818, ffffff00)
 cc6a4 (Frame 4) wait_reply_msg+98 : semTake (ffffff00, 3e8)
859690 (Frame 5) semTake        +28 : vxWorks_semTake (ffffff00, 3e8)

以下是上面调用的方法原型:

void process_host_invoke(X *param);
int wait_reply_msg(uchar **msg,int* size,int wait_tick );

STATUS semTake(
SEM_ID semId,  /* semaphore ID to take */
int    timeout /* timeout in ticks */
);

是否有可能来自第3帧的类型为uchar ** msg的参数作为参数传递给第5帧,即使数据类型不同也是如此。

我是vxWorks环境的新手。是否可能在堆栈上错误地传递函数参数。

FFFFFF00(H) - > 4,294,967,040此值作为SEM_ID传递给semTake当调用semTake时我获得了S_objLib_OBJ_ID_ERROR。

PS:我没有转储文件

c++ vxworks
1个回答
0
投票

是否可能在堆栈上错误地传递函数参数。

是的,绝对有可能。在使用在MIPS32处理器上运行的旧版VxWorks时,我已经看到了用于任务跟踪的这种行为。 MIPS calling convetions不需要在堆栈上放置函数参数,它们通过寄存器传递,可能根本不会出现在堆栈中。不确定是不是原因,但函数调用参数对我来说从来都不准确。

© www.soinside.com 2019 - 2024. All rights reserved.