从arm-none-eabi-gdb目标sim内部捕获segfault?

时间:2019-05-02 08:43:39

标签: gcc arm gdb

我希望使用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。

0 个答案:

没有答案