gdb本地调试版本移植至ARM-Linux系统
移植ncurses库
本文使用的ncurses版本为ncurses-5.9.tar.gz
下载地址:https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz
1.???????将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压
tar-zxvf?ncurses-5.9.tar.gz
2.???????解压后进入到ncurses-5.9目录下
cdncurses-5.9
3.???????在ncurses-5.9目录下创建编译完成后生成文件位置
mkdiroutput
cdoutput
mkdirarm-linux
4.???????生成Makefile文件
./configure--target=arm-none-linux-gnueabi?--prefix=$PWD/output/arm-linux??--enable-termcap?--with-shared?--without-ada
l??--target表示编译器的前缀,需要根据编译的不同需求进行修改
l??--prefix表示编译完成后生成文件的位置
l??--nable-termcap表示?关键代码使用?termcap(terminalcapabilities)数据库?[自动检测]
l??--with-shared表示动态编译
5.???????编译
make
当遇到如下报错时
Makefile:794:recipe?for?target?'../obj_s/lib_gen.o'?failed
make[1]:***?[../obj_s/lib_gen.o]?Error?1
make[1]:Leaving?directory?'.../ncurses-5.9/ncurses'
Makefile:109:recipe?for?target?'all'?failed
make:***?[all]?Error?2
需要进入ncurses-5.9/include文件夹,修改?curses.tail?文件下的如下内容,将注释?/*?generated?*/?去掉
externNCURSES_EXPORT(bool)????mouse_trafo(int*,?int*,?bool);?????????/*?generated*/
6.???????安装
Makeinstall
7.???????安装完成后会在/output/arm-linux目录下生成库文件,我们只需将lib目录下的libncurses.so.5?库拷贝至开发板
移植gdb
本文使用的gdb版本为gdb-7.12.tar.gz
下载地址:https://ftp.gnu.org/gnu/gdb/gdb-7.12.tar.gz
1.???????将gdb压缩包拷贝至Linux主机或使用wget命令下载并解压
tar-zxvf?gdb-7.12.tar.gz
2.???????解压后进入到ncurses-5.9目录下
cdgdb-7.12
3.???????生成Makefile文件
./configure?-host=arm-none-linux-gnueabi?CC=/home/vanxoak/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc??--enable-shared--prefix=$PWD/output/arm-linux?--disable-werror?--without-x?--disable-gdbtk--disable-tui?--without-included-regex?--without-included-gettextLDFLAGS="-L$PWD/../output/arm-linux/lib"CPPFLASS="-I$PWD/../output/arm-linux/include"
l??--host=arm-none-linux-gnueabi?用arm-none-linux-gnueabi编译
l??CC为交叉编译器绝对路径
l??--enable-shared?动态编译
l??prefix=“$PWD/output/arm-linux”?安装目录
l??--disable-werror?屏蔽werror报警
l??--without-x?取消x?windows?支持
l??--disable-gdbtk?取消gdbtk
l??--disable-tui?取消tui?界面
l??--without-included-gettext?去掉用于多语言处理的gettext库
l??"LDFLAGS=XXX"指交叉编译完成的ncurse的lib目录路径
l??"CPPFLAGS=XXX"指是交叉编译完成的ncurse的include目录路径
4.???????编译
make
5.???????安装
makeinstall
安装完成后会在.../gdb-7.12/output/arm-linux/bin/目录下生成gdb可执行程序。
移植至HDT3-EVM?开发板
1.???????将libncurses.so.5库?文件拷贝至/usr/lib目录下,若/usr目录下无lib目录可手动创建mkdir?lib
2.???????将gdb程序拷贝至/bin目录下
?
测试调试
1.??编写可执行测试程序,示例hello.c代码如下,该代码执行后会打印Hello?World。
#include<stdio.h>?
intmain(int?argc,?char?*argv[])?
{?
????printf("Hello?World\n");?
????return?0;?
}
2.??使用交叉编译器进行编译,需要注意的是,要使用gdb调试程序,需要在使用交叉编译器编译源代码时加上?"?-g?"?参数保留调试信息,否则不能使用GDB进行调试且报如下最后一行所示错误:
/home#?gdb?hello
GNUgdb?(GDB)?7.12
Copyright(C)?2016?Free?Software?Foundation,?Inc.
LicenseGPLv3+:?GNU?GPL?version?3?or?later?<http://gnu.org/licenses/gpl.html>
Thisis?free?software:?you?are?free?to?change?and?redistribute?it.
Thereis?NO?WARRANTY,?to?the?extent?permitted?by?law.?Type?"show?copying"
and"show?warranty"?for?details.
ThisGDB?was?configured?as?"arm-none-linux-gnueabi".
Type"show?configuration"?for?configuration?details.
Forbug?reporting?instructions,?please?see:
<http://www.gnu.org/software/gdb/bugs/>.
Findthe?GDB?manual?and?other?documentation?resources?online?at:
<http://www.gnu.org/software/gdb/documentation/>.
Forhelp,?type?"help".
Type"apropos?word"?to?search?for?commands?related?to?"word"...
Readingsymbols?from?hello...(no?debugging?symbols?found)...done.
3.???????使用交叉编译器编译测试程序
arm-none-linux-gnueabi-gcc-g??-o?hello?hello.c
4.???????将生成的hello文件拷贝至HDT3-EVM?开发板上并使用sync命令保存
5.???????输入gbd命令启动gdb程序
/home#?gdb
GNUgdb?(GDB)?7.12
Copyright(C)?2016?Free?Software?Foundation,?Inc.
LicenseGPLv3+:?GNU?GPL?version?3?or?later?<http://gnu.org/licenses/gpl.html>
Thisis?free?software:?you?are?free?to?change?and?redistribute?it.
Thereis?NO?WARRANTY,?to?the?extent?permitted?by?law.?Type?"show?copying"
and"show?warranty"?for?details.
ThisGDB?was?configured?as?"arm-none-linux-gnueabi".
Type"show?configuration"?for?configuration?details.
Forbug?reporting?instructions,?please?see:
<http://www.gnu.org/software/gdb/bugs/>.
Findthe?GDB?manual?and?other?documentation?resources?online?at:
<http://www.gnu.org/software/gdb/documentation/>.
Forhelp,?type?"help".
Type"apropos?word"?to?search?for?commands?related?to?"word".
(gdb)
上述代码(gdb)为GBD内部命令引导符,表示等待用户输入gbd命令
6.???????使用?"?file?hello?"?命令载入被调试的测试程序
(gdb)file?hello
Readingsymbols?from?hello...done.
显示Reading?symbols?from?hello...done.表示被测程序加载成功
7.???????使用?"?r?"命令执行调试测试程序
(gdb)r
Startingprogram:?/home/hello
HelloWorld
[Inferior1?(process?849)?exited?normally]
如上述代码显示?"?Hello?World?"?即表示hello程序执行完成
(gdb)help
Listof?classes?of?commands:
aliases--?Aliases?of?other?commands
breakpoints--?Making?program?stop?at?certain?points
data--?Examining?data
files--?Specifying?and?examining?files
internals--?Maintenance?commands
obscure--?Obscure?features
running--?Running?the?program
stack--?Examining?the?stack
status--?Status?inquiries
support--?Support?facilities
tracepoints--?Tracing?of?program?execution?without?stopping?the?program
user-defined--?User-defined?commands
Type"help"?followed?by?a?class?name?for?a?list?of?commands?in?that?class.
Type"help?all"?for?the?list?of?all?commands.
Type"help"?followed?by?command?name?for?full?documentation.
Type"apropos?word"?to?search?for?commands?related?to?"word".
Commandname?abbreviations?are?allowed?if?unambiguous.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!