我正在由Synopsis提供的ARM IP(模块名称为ARM926EJS)上运行C软件,并且我使用的整个工具也是Synopsis的Platform Architect(基于TLM模拟器,硬件部分在SystemC中实现) 。
我从硬件模块收到了该软件不应该访问的地址。硬件模块看不到软件信息(或者我可能不知道),因此我通常在仿真过程中将arm-none-eabi-gdb附加到ARM IP上以调试软件。
我必须检查,但是我认为我使用的ARM IP不支持硬件观察点(仅使用一个硬件观察点会返回“太多的硬件观察点”)。我正在通过键入
来尝试软件观察点 set can-use-hw-watchpoints 0
我试图查看软件何时通过键入来访问陌生地址
watch *(int*)(0x2056604+0xd0000000)
该数字是我在硬件上收到的地址。但是,程序冻结,并且gdb上的中断甚至无法工作,我必须停止模拟并删除观察点才能继续。
但是,奇怪的是,rwatch正常工作(尽管问题仍然存在,因为地址是通过“写”访问的)。真正看到该软件中的哪个点导致对地址0x2056604 + 0xd0000000的访问将是非常有益的,但是由于监视点对我不起作用,是否有其他方法可以中断这种访问?还是有办法解决软件观察点的死机问题?
附加说明)我还尝试了暂停对内存访问的模拟,然后查看软件的堆栈框架。该软件具有奇怪的堆栈,并且gdb告诉我该堆栈可能已损坏。输出如下。
#0 0x00002bf0 in ?? ()
#1 0x00001b94 in ?? ()
#2 0x00001b94 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)