我在Vxworks + PPC 603中收到“无效程序计数器地址”的异常。
应用程序链接到多个“C”库。无法放置,可能导致此问题的原因是什么?
是否有可能导致错误的编译选项?
任何指示或指示都会有所帮助。
由于
更新:
我有一个结构,其成员是函数指针。结构本身是静态的,它的地址被传递并通过结构调用不同的函数。
在其中一轮测试中,我发现在函数指针中,函数地址值减1.如果函数地址是0x009a3730,则PC有0x00913729。
另外,如果我更改编译器选项,崩溃的位置或发生崩溃的运行次数会发生变化。
答案 0 :(得分:2)
如果指针值被破坏并稍后被调用,那么任何使用函数指针的情况都很容易导致这种情况。检查信号处理程序(如果有)以及处理回调的任何其他API。
答案 1 :(得分:0)
“如果功能地址是0x009a3730,则PC具有0x00913729”。这里的区别不是1 :)但PC总是指向它必须执行AFAIK的下一条指令的地址。
也许您可以在调试器中运行核心转储并打印出:
答案 2 :(得分:0)
@All,谢谢您的建议。
事实证明,包含该地址的位置错误地指向另一个结构的引用成员,并且该引用成员在每次调用中减少了一个以释放该结构。
该结构的内存应该通过调用我们的一个函数来分配。但是,相反,它只是在没有任何初始化或内存分配的情况下引用一些服务器内存,它最终引用了存储全局结构的静态内存。这导致静态结构被破坏,并导致崩溃。
对我们的日志进行彻底的逐行分析有助于将所有部分组合在一起。