Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GCC中以编程方式调用调试器_C_Gcc_Gdb_Arm - Fatal编程技术网

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

在GCC中以编程方式调用调试器,c,gcc,gdb,arm,C,Gcc,Gdb,Arm,是否可以通过编程方式从GCC进入调试器 例如,我想要的是: #在此处定义停止执行??? 当把它放在某个代码行上时,就会迫使调试器停在那里。 有可能吗? 我找到了,但我不能使用它,因为在我的嵌入式ARM系统上我没有signal.h (但是我可以使用内联汇编)。您可以从GDB运行应用程序,并在代码调用中运行,例如。这将在此时停止您的应用程序。我不确定在那之后是否可以继续。您可以从GDB运行应用程序,并在代码调用中运行,例如。这将在此时停止您的应用程序。我不确定是否可以在这之后继续。通常,最好的方法是

是否可以通过编程方式从GCC进入调试器

例如,我想要的是:
#在此处定义停止执行???
当把它放在某个代码行上时,就会迫使调试器停在那里。 有可能吗? 我找到了,但我不能使用它,因为在我的嵌入式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鲍尔特,我需要在中断后继续你没有理由不能继续非法引用之后,除非调试器严重损坏。