gdb本地调试版本移植至ARM-Linux系统

QQ截图20231212142320.jpg

移植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目录下

T3.JPG

测试调试

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/268260.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SD-WAN架构:优化连接以提升性能

SD-WAN架构主要分为三种类型&#xff0c;分别为本地架构、支持云的架构、支持云的骨干架构。每一种架构都基于它们利用广域网&#xff08;WAN&#xff09;的方式而有其独特的优势。本文将对三种SD-WAN架构进行简要介绍。 SD-WAN本地架构 SD-WAN本地架构是在现场使用SD-WAN盒或…

微信小程序:上传图片到别的域名文件下

效果 wxml <!-- 上传照片 --> <view class"addbtn"><view classpic name"fault_photo" wx:for"{{imgs}}" wx:for-item"item" wx:key"*this"><image classweui-uploader_img src"{{item}}"…

前期只用到审批流程,好用的OA软件有哪几个?

“前期只用到审批流程&#xff0c;需要五六个人层层审批&#xff0c;最好审批流程是免费的&#xff0c;后期会扩展到其它功能&#xff0c;有适合我的软件吗&#xff1f;” 先来总结一下题主的需求&#xff1a; OA系统中审批流程最好是免费的流程需要层层审批后期能够扩展到其…

给孩子选台灯什么标准好?精选高品质的护眼台灯

孩子的身心健康&#xff0c;永远是家长最关心的事情&#xff0c;但是现在的青少年近视率非常高&#xff0c;达到了52.7%&#xff0c;也就是说平均下来&#xff0c;每十个孩子当中就有五个是近视的&#xff01;面对这样的情况&#xff0c;我们又应该如何更好的保护孩子的眼睛呢&…

项目经理该如何正确“救火”

作为一名项目经理&#xff0c;我们经常会面对意想不到的情况。有时候&#xff0c;一些本不应该出现问题的事情却突然出现了困难。比如&#xff0c;有团队成员因为突然感冒无法来上班&#xff0c;导致项目进度受到影响&#xff1b;或是客户在项目设计审批后&#xff0c;又提出了…

体育羽毛乒乓篮球多场馆场地预定会员卡小程序开源版开发

体育羽毛乒乓篮球多场馆场地预定会员卡小程序开源版开发 体育羽毛乒乓篮球多场馆场地预定会员卡小程序功能介绍&#xff1a; 场地预定功能&#xff1a;用户可以通过小程序预定体育羽毛乒乓篮球等多种项目的场地。用户可以选择日期、时间和场地类型进行预定&#xff0c;方便快捷…

48.0/图片和多媒体文件的使用(详细版)

目录 48.1 网页中插入图片 48.1.1 基本语法 48.1.2 常见属性 48.2 图片超链接 48.3 设置图片热区链接 48.4 将图片作为网页背景 48.5 滚动字幕 48.6 插入多媒体文件 48.1 网页中插入图片 48.1.1 基本语法 <img src=“图片地址”> img 标记用于将图像插入到 HTML…

Vue3-03-reactive() 响应式基本使用

reactive() 的简介 reactive() 是vue3 中进行响应式状态声明的另一种方式&#xff1b; 但是&#xff0c;它只能声明 【对象类型】的响应式变量&#xff0c;【不支持声明基本数据类型】。reactive() 与 ref() 一样&#xff0c;都是深度响应式的&#xff0c;即对象嵌套属性发生了…

Intel® Enclave Operation(三)

文章目录 前言一、Constructing an Enclave1.1 ECREATE1.2 EADD and EEXTEND Interaction1.3 EINIT Interaction1.4 Intel SGX Launch Control Configuration 二、Enclave Entry and Exiting2.1 Controlled Entry and Exit2.2 Asynchronous Enclave Exit (AEX)2.3 Resuming Exe…

妙享中心升级,小米电脑管家 v1.0.0.489,非小米笔记本安装教程

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;适合想要了解和入门的朋友&#xff1a;点击访问链接 十月底&#xff0c;小米新品发布会发布了新的年度旗舰&#xff0c;小米14和14 Pro&#xff0c;同时发布了最新的自研系统——小米澎湃…

mysql:用SHOW CREATE TABLE tbl_name查看创建表的SQL语句

https://dev.mysql.com/doc/refman/8.2/en/show-create-table.html 可以用SHOW CREATE TABLE tbl_name查看创建表的SQL语句。 例如&#xff0c;SHOW CREATE TABLE test_table;表示查询创建test_table表的SQL语句&#xff1a;

一键登记,精彩不止三天!FS 2024春季展预登记开启

2024年4月10—12日&#xff0c;Fashion Source第28届深圳国际服装供应链博览会&#xff08;FS 2024春季展&#xff09;将于深圳宝安国际会展中心再度启航&#xff01;同期举办AW24深圳原创时装周、Premire Vision品锐至尚深圳展SS25&#xff01;三大时尚IP联袂而至&#xff0c;…