我正在调试U-boot,在DRAM初始化完成后,代码从内部RAM重新定位到DRAM。因此,图像符号在不同位置(内部RAM地址空间和DRAM地址空间)加载两次。当我尝试创建断点时,gdb为两个地址空间添加了两个断点。问题是硬件断点的数量是有限的。目前,我通过删除较旧的断点来添加新的断点。我找到了一种方法来卸载(删除)早期加载的符号文件(映射到内部RAM的符号)。
任何建议都表示赞赏。先谢谢!
答案 0 :(得分:5)
我在GDB的补丁上工作,删除了用户添加的符号文件。这是一个叫做的新命令 除去非符号文件:
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
答案 1 :(得分:4)
您可以在不带参数的情况下运行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.