我希望使用arm-none-eabi-gdb模拟器对嵌入式库执行自动化的单元测试。我有一个问题,无效的内存访问不会在模拟器中导致任何事情,而在实际环境中却会导致分段错误或硬错误异常。
我有一个保存为ub.c
的以下小程序:
int main() { *(volatile int*)(void*)0 = 42; }
我使用以下代码进行编译
arm-none-eabi-gcc -specs=nosys.specs ub.c -o ub.elf
然后执行
arm-none-eabi-gdb ub.elf
在gdb内部,我执行命令:
target sim
load
break exit
run
存储为NULL似乎被完全忽略了。您甚至可以设置break main
并使用si
步骤来用str r2, [r3]
和r3=0
执行指令r2=42
。什么都没发生。我希望在gdb模拟器上会出现类似“异常/ seg故障/分支到硬故障向量的任何地方”之类的东西,我可以在gdb中对其进行检查/处理以自动化单元测试。
是否可以在gdb目标模拟器中启用“硬故障异常”?
有什么方法可以“捕获”无效的内存访问,未对齐的内存访问,类似于使用模拟器目标的arm-none-eabi-gdb中的情况?
顺便说一句,我使用的是Arch Linux 4.20.6和arm-none-eabi-gcc 8.2.1。