在GCC中以编程方式调用调试器
是否可以通过编程方式从GCC进入调试器 例如,我想要的是:在GCC中以编程方式调用调试器,c,gcc,gdb,arm,C,Gcc,Gdb,Arm,是否可以通过编程方式从GCC进入调试器 例如,我想要的是: #在此处定义停止执行??? 当把它放在某个代码行上时,就会迫使调试器停在那里。 有可能吗? 我找到了,但我不能使用它,因为在我的嵌入式ARM系统上我没有signal.h (但是我可以使用内联汇编)。您可以从GDB运行应用程序,并在代码调用中运行,例如。这将在此时停止您的应用程序。我不确定在那之后是否可以继续。您可以从GDB运行应用程序,并在代码调用中运行,例如。这将在此时停止您的应用程序。我不确定是否可以在这之后继续。通常,最好的方法是
#在此处定义停止执行???
当把它放在某个代码行上时,就会迫使调试器停在那里。
有可能吗?
我找到了,但我不能使用它,因为在我的嵌入式ARM系统上我没有signal.h
(但是我可以使用内联汇编)。您可以从GDB运行应用程序,并在代码调用中运行,例如。这将在此时停止您的应用程序。我不确定在那之后是否可以继续。您可以从GDB运行应用程序,并在代码调用中运行,例如。这将在此时停止您的应用程序。我不确定是否可以在这之后继续。通常,最好的方法是通过设备的工具链提供的库函数
我无法测试它,但一般的解决方案可能是插入一只手臂。它需要一个即时参数,调试器可能会对其进行解释,结果可能会很奇怪。通常,最好的方法是通过设备工具链提供的库函数来实现
我无法测试它,但一般的解决方案可能是插入一只手臂。它需要一个即时参数,调试器可能会对其进行解释,结果可能会很奇怪。您尝试执行的操作称为 在不知道如何实际调试的情况下,很难精确地说出来。我假设您的嵌入式系统运行gdbstub。如何支持这一点有多种可能性: 使用专用指令 这可能是系统和调试器上支持软件断点的标准方法 将无效指令馈送到CPU gdbstub可以放置自己的
unde
ARM模式处理程序。如果您走这条路线,您必须知道当前的CPU模式(ARM或THUMB),因为指令大小将不同。未定义指令的示例:
ARM: 0xE7F123F4
THUMB: 0xDE56
在运行时,可以从PC寄存器的最低位找到CPU模式。但更简单的方法是了解您是如何编译对象文件的,您将软件断点放在了哪里
使用SWI指令
我们在使用RealView冰时就这样做了。如果您在嵌入式系统上运行某些操作系统,这很可能不适用于您。SWI通常被操作系统用来实现系统调用您试图做的就是调用 在不知道如何实际调试的情况下,很难精确地说出来。我假设您的嵌入式系统运行gdbstub。如何支持这一点有多种可能性: 使用专用指令 这可能是系统和调试器上支持软件断点的标准方法 将无效指令馈送到CPU gdbstub可以放置自己的
unde
ARM模式处理程序。如果您走这条路线,您必须知道当前的CPU模式(ARM或THUMB),因为指令大小将不同。未定义指令的示例:
ARM: 0xE7F123F4
THUMB: 0xDE56
在运行时,可以从PC寄存器的最低位找到CPU模式。但更简单的方法是了解您是如何编译对象文件的,您将软件断点放在了哪里
使用SWI指令
我们在使用RealView冰时就这样做了。如果您在嵌入式系统上运行某些操作系统,这很可能不适用于您。操作系统通常使用SWI来实现系统调用取消对无效数据的引用address@JimBalter我需要在断点后恢复除非调试器严重损坏,否则没有理由不能在非法引用后恢复。取消引用无效address@Jim鲍尔特,我需要在中断后继续你没有理由不能继续非法引用之后,除非调试器严重损坏。