【发布时间】:2013-02-16 00:55:44
【问题描述】:
我正在尝试使用gdb 调试在裸机 ARM 平台上运行的程序。在某些时候会生成SWI(软件中断)异常。但是,如您所见,回溯并没有显示产生异常的原因:
(gdb)c
Continuing. ^C Program received signal SIGTRAP, Trace/breakpoint trap. 0xffff0008 in ?? () (gdb) bt #0 0xffff0008 in ?? ()
在ARM上运行的程序是用arm-none-linux-gnueabi-gcc -O2 -c -ggdb编译的,我也试过用-O0得到同样的结果。
如何获得有意义的调用堆栈?是否有其他方法可以找到产生此异常的原因?
【问题讨论】:
-
可以打印收据吗?另外,这是裸机还是你有操作系统?
-
我可以打印寄存器,但是程序计数器是0xffff0008,我应该尝试分析寄存器中的哪些信息?实际上,在设置了一些断点并单步执行汇编指令之后,我能够看到我的代码正在跳转到经过我的程序的内存地址,其中包含未定义的指令,从而导致 SWI 异常。这是裸机,没有操作系统。
标签: gdb arm bare-metal