1

我正在调试 U-boot,在 DRAM 初始化完成后,代码从内部 RAM 重新定位到 DRAM。因此,图像符号在不同的位置(在内部 RAM 地址空间和 DRAM 地址空间)被加载两次。当我尝试创建断点时,gdb 为两个地址空间添加了两个断点。问题是硬件断点的数量是有限的。目前,我通过删除旧断点来添加新断点。我正在寻找一种方法来卸载(删除)早期加载的符号文件(映射到内部 RAM 的符号)。

任何建议表示赞赏。先谢谢了!

4

2 回答 2

6

我为 GDB 开发了一个补丁来删除用户添加的符号文件。这是一个名为 remove-symbol-file 的新命令:

remove-symbol-file FILENAME
remove-symbol-file -a ADDRESS
  Remove a symbol file added via add-symbol-file.  The file to remove
  can be identified by its filename or by an address that lies within
  the boundaries of this symbol file in memory.

该补丁已合并到 GDB 的主分支 [1] 中,因此应该在 GDB 7.7 中可用。同时,您可以从最新的开发源构建 GDB:https ://www.gnu.org/software/gdb/current/ 。

[1] http://sourceware.org/ml/gdb-patches/2013-10/msg00891.html

于 2013-10-30T12:05:29.067 回答
5

您可以在symbol-file没有参数的情况下运行:

Reading symbols from /tmp/foo...done.
(gdb) symbol-file
Discard symbol table from `/tmp/foo'? (y or n) y
No symbol file now.
(gdb) symbol-file foo
Reading symbols from /tmp/foo...done.
(gdb) symbol-file
Discard symbol table from `/tmp/foo'? (y or n) y
No symbol file now.
于 2013-09-05T14:07:57.083 回答