以编程方式在GCC中调用调试器

时间:2012-08-07 08:54:02

标签: c gcc gdb arm

是否有可能以编程方式从GCC进入调试器?

例如我想要的东西: #define STOP_EXECUTION_HERE ??? 当放在某些代码行上时会强制调试器停在那里。 有可能吗? 我发现some solution,但我无法使用它,因为在我的嵌入式ARM系统中我没有signal.h

(但我可以使用内联汇编)。

3 个答案:

答案 0 :(得分:3)

您要做的是software breakpoint

如果不知道如何实际调试,很难准确说出来。我假设您的嵌入式系统运行gdbstub。有多种可能性可以支持:

使用专门的BKPT说明

这可能是系统和调试器支持软件断点的标准方法

向CPU输入无效指令

gdbstub可以放置自己的UNDEF ARM模式处理程序。如果你走这条路,你必须知道当前的CPU模式(ARM或THUMB),因为指令大小会有所不同。未定义指令的示例:

ARM: 0xE7F123F4
THUMB: 0xDE56

在运行时,CPU模式可以从PC寄存器的最低位找到。但更简单的方法是知道如何编译目标文件,放置软件断点的位置

使用SWI说明

使用RealView ICE时我们这样做了。如果您在嵌入式系统上运行某些操作系统,则很可能这不适用于您。操作系统通常使用SWI来实现系统调用

答案 1 :(得分:2)

通常,最好的方法是通过设备工具链附带的库函数。

我无法测试它,但一般的解决方案可能是插入ARM BKPT instruction。它需要一个立即参数,您的调试器可能会解释,可能会产生奇怪的结果。

答案 2 :(得分:0)

您可以从GDB运行您的应用程序,并在代码调用中运行abort。这将在此时停止您的申请。我不确定在那之后是否可以继续。