我已经为armv7-m(Cortex-Mx)微控制器编写了内核。内核能够动态加载ELF文件。在GDB中调试时,将加载所有内核符号,并且我可以单步浏览C ++源代码而不会出现问题。在动态加载时,使用以下符号添加应用程序符号:
add-symbol-file app <base .text address> -s .data <base .data address> -s .bss <base .bss address>
然后我可以设置断点,使用汇编视图进入main并打印出argc / argv等符号的值。一切看起来都正确。
除了在源代码视图中,它仅显示[No Source Available]。我验证了应用程序已使用 -O0 -ggdb 进行编译。 ELF应用程序中的路径正确。没遇到GDB 设置目录 。
在GDB中解决源代码的机制是什么?如果加载了符号,则完整的ELF随调试信息一起提供,并且源代码与编译位置相同,还有什么不对?
gdb-multiarch GNU gdb(Ubuntu 8.1-0ubuntu3)8.1.0.20180409-git
arm-none-eabi-gcc(用于Arm嵌入式处理器的GNU工具7-2018-q3-update)7.3.1 20180622(发行版)[ARM / embedded-7-branch version 261907]
谢谢!
答案 0 :(得分:0)
我能够解决此问题,并在链接描述文件中的.text上方移动了一部分。不知道为什么这会改变任何东西...我想它必须改变下面部分的对齐方式,但是我的实验都没有完成。
/* These MUST be before .text segment for proper symbolic debugging... */
.dynstr : { *(.dynstr) } > FLASH
.hash : { *(.hash) } > FLASH
.dynsym : { *(.dynsym) } > FLASH
任何可能的解释都将不胜感激。也许是由于某些GDB内部假设?