GDB 断点调试

GDB 断点调试

xtensa-esp-elf-gdb build/blink.elf -x gdninit 启动 gdb 可以看到在gdbinit文件中设置在app_main处的硬件断点已经起了作用。 此处打印出了断点处的代码和断点信息。 list 简化命令:l <

xtensa-esp-elf-gdb build/blink.elf -x gdninit

  • 启动 gdb
    4. GDB 断点调试-20240621182953176.webp

可以看到在gdbinit文件中设置在app_main处的硬件断点已经起了作用。
此处打印出了断点处的代码和断点信息。

list

简化命令:l

  • 打印处断点附近的代码。

break N

简化命令:b N

  • 增加断点在代码中的 N 行。
    4. GDB 断点调试-20240621183425587.webp

打印出代码,在 99 行处添加断点。

info break N

简化命令:info b N

  • 查看当前断点信息。
    4. GDB 断点调试-20240621183553757.webp

断点信息:

  1. Num:当前断点的序列号。
  2. Type:断点类型。
  3. Disp:触发断点之后,断点是否继续保持。
  4. Enb:Enable / Disable,断点 有效 / 无效。
  5. Address:断点地址。
  6. What:断点的详细信息。
  • info命令还可以看到断点被触发了多少次
    4. GDB 断点调试-20240621184355123.webp

这里可以看到断点目前为止一共被触发了 6 次。

continue

简化命令:c

继续运行。
4. GDB 断点调试-20240621184115299.webp

代码的运行停止在了99 行的 blink_led()处。

disable N

  • disable加断点序列号可以不启用某个断点。
    4. GDB 断点调试-20240621184910642.webp

可以看到此处断点已不再启用。
此时继续程序运行,可以看到 LED 正常闪烁。

此时可以用Ctrl-c中断代码运行,调试程序会停止在任意代码处。

enable N

  • 启用某个断点。

delete N

简化命令:d N

  • 删除某个断点。如果不后缀任何数字,则意味着删除所有断点。

break filename:N

简化命令:b fiilename:N

  • 在某文件某行打断点。

例如break blink_example_main.c:99
即在此文件 99 行 打断点。

break func

简化命令:b func

  • 在某函数出打断点。
    4. GDB 断点调试-20240621190103598.webp

用函数名来断点时,断点会停留在函数的第一行。

tbreak N/func

简化命令:tb N/func

  • 设置临时断点,断点在触发后就会被删除。
Comment