所以现在我明白我得到一个ARM数据中止异常 - 我看到如何捕获异常本身(STL库中的错误地址),但是我想在异常之前向上走回堆栈帧。我正在使用IAR工具链,它告诉我在异常后调用堆栈不可用 - 是否有一种技巧方法可以说服工具向我显示调用堆栈?感谢您的快速帮助!
答案 0 :(得分:6)
如果你看一下ARM ARM(ARM架构参考手册,只是google“arm arm”),程序员模型 - >处理器模式和寄存器部分。当处于中止模式时,您可以自行调整,以便您可以从中止切换到主管,然后复制r13,然后切换回中止模式并从r13的副本转储堆栈。您的r14还会告诉您中止发生的位置。
如果这次中止来自对齐,我不会感到惊讶。尝试读取/写入一个字,其地址为低两位以外的零或带有地址集的lsbit的半字。实际上,如果你取出链接寄存器和寄存器转储(r0-r12),因为中止和用户/主管使用相同的寄存器空间,你可以查看导致中止的指令和地址,看看它是否确实是对齐问题或其他问题。请注意,根据具有中止的模式拇指或手臂,电脑前面有一条,两条或三条指令,如果您根本不使用拇指,则无需担心。