http://blog.csdn.net/zoomdy/article/details/17249165
mingdu.zheng <at> gmail <dot> com
使用arm-eabi-gdb加载应用程序调试,运行后出现错误:
$ arm-eabi-gdb httpd_sequential
0x00008766 in ?? ()
(gdb) n
Cannot find bounds of current function
看起来像是gdb找不到应用程序的调试符号,检查编译选项已经添加了调试相关选项。
使用file命令检查加载的文件:
$ file httpd_sequential
httpd_sequential: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
编译应用程序的gcc与调试程序的gdb不匹配,arm-eabi-gdb需要的是arm-eabi-gcc编译生成的映像文件。gdb居然不检查ELF文件头给出错误报告。
使用正确的gcc编译其编译后重新使用file命令检查文件类型:
$ file httpd_sequential
httpd_sequential: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
使用匹配的gcc编译的应用程序调试起来就不会有问题。
在嵌入式系统开发过程通常需要交叉编译,必须小心处理所使用的编译器和调试器,特别是在使用Eclipse等集成开发环境的情况下要仔细核对开发环境使用的是那个编译器和调试器。默认情况下Eclipse调用的是本地编译器和调试器,而不是交叉编译器。