是否有可能以编程方式从GCC进入调试器?
例如我想要的东西:
#define STOP_EXECUTION_HERE ???
当放在某些代码行上时会强制调试器停在那里。
有可能吗?
我发现some solution,但我无法使用它,因为在我的嵌入式ARM系统中我没有signal.h
。
(但我可以使用内联汇编)。
答案 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
。这将在此时停止您的申请。我不确定在那之后是否可以继续。