gpt4 book ai didi

gdb - 从 Flash 启动时断点不起作用

转载 作者:行者123 更新时间:2023-12-04 14:13:22 25 4
gpt4 key购买 nike

过去,我一直在调试加载在我的 Cortex M3 (STM32F2) 内部 SRAM 中的可执行文件,没有问题。我最近一直在将我的可执行文件加载到 Flash(因为大小问题)。

从那时起,使用 GDB 进行调试就不再奏效。据我了解,当可执行文件在 Flash 中时,只能使用硬件断点(而不是软件断点),并且我有六个硬件断点。但是,当仅设置一个硬件断点时,GDB 会产生一条错误消息:

(gdb) break main
Breakpoint 1 at 0x800019a: file src/main.c, line 88.
(gdb) c
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.
(gdb) Warning:
Cannot insert hardware breakpoint 1.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.

可能出什么问题了?我的硬件断点是否在后台执行?

注意:我使用 OpenOCD 通过 JTAG 加载可执行文件。

最佳答案

因此,基本上有两种方式(加上一种非常糟糕的方式)可以在任何给定的调试器/平台组合上实现断点:

  • 使用某些硬件功能(“硬件断点”)使处理器在遇到特定地址时陷入陷阱。如果它完全可用,这通常仅限于几个断点。
  • 对于正在设置的每个断点,将断点处的指令替换为某种“陷阱”指令(即,将中断调试器的指令)。当遇到断点之一时,将原始指令换回并单步执行一次以使其运行。
  • 单步执行整个程序。这个真的不算数,因为它慢得可怕。

  • 听起来好像您的调试器只使用方法#2(“软件断点”)。这种方法的问题在于它要求程序是可写的——而闪存不能一次写一条指令,所以这种技术不起作用。

    关于gdb - 从 Flash 启动时断点不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10498827/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com