使用GDB调试断点信息是gdb动态添加或取消的还是将断点烧录到elf文件的?断点信息是如何加载进单片机的并进行加下来的调试运行的?

发布时间 2023-06-08 11:34:49作者: 周星星7290

使用GDB调试断点信息是gdb动态添加或取消的还是将断点烧录到elf文件的?断点信息是如何加载进单片机的并进行加下来的调试运行的?

 

from :GPT-4

GDB(GNU调试器)是一个用于调试程序的强大工具,它可以让你设置断点、检查变量和内存、执行单步调试等。在单片机(微控制器)上使用GDB进行调试时,通常需要一个硬件调试器,例如JTAG或SWD,这些硬件调试器可以与单片机进行通信以实现调试功能。

在使用GDB调试时,断点信息是动态添加或取消的,而不是烧录到ELF文件中。GDB与硬件调试器一起使用时,它会将断点信息发送给硬件调试器,然后硬件调试器会将这些断点设置到单片机上。这里的关键是实现硬件调试器和单片机之间的通信,以便在运行过程中适时地停止代码执行并将控制权交还给GDB。

具体地说,GDB在设置断点时,会通过硬件调试器向单片机发送相应的命令,以在指定的内存地址上设置断点。通常,硬件调试器会将指定地址处的指令替换为一条专用的断点指令(例如ARM架构中的BKPT指令)。当单片机执行到该指令时,它会被中断并将控制权交给硬件调试器,然后硬件调试器会通知GDB已经到达了设置的断点。此时,你可以在GDB中查看和修改内存、寄存器等内容,执行单步调试等操作。

当你继续执行程序时,硬件调试器会将断点指令替换回原始指令,并继续执行。类似地,当你取消断点时,GDB会通过硬件调试器将原始指令恢复到对应的内存地址上。

总之,GDB通过与硬件调试器的配合,实现了在单片机上动态添加、取消断点和其他调试功能。断点信息是在运行过程中通过硬件调试器设置和取消的,而不是烧录到ELF文件中。

 

断点信息是通过 GDB 协议进行调试时动态添加和取消的,而不是在编译过程中直接嵌入到 ELF 文件中。

gcc-g是将调试的通用信息烧录到elf文件的,而不是将具体断点烧录进去的。