当前位置: 首页 > news >正文

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.

相关文章:

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

移植ncurses库 本文使用的ncurses版本为ncurses-5.9.tar.gz 下载地址&#xff1a;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目录…...

《Linux C编程实战》笔记:实现自己的ls命令

关键函数的功能及说明 1.void display_attribute(struct stat buf,char *name) 函数功能&#xff1a;打印文件名为name的文件信息&#xff0c;如 含义分别为&#xff1a;文件的类型和访问权限&#xff0c;文件的链接数&#xff0c;文件的所有者&#xff0c;文件所有者所属的组…...

Python个人代码随笔(观看无益,请跳过)

异常抛错&#xff1a;一般来说&#xff0c;在程序中&#xff0c;遇到异常时&#xff0c;会从这一层逐层往外抛错&#xff0c;一直抛到最外层&#xff0c;由最外层把错误显示在用户终端。 try:raise ValueError("A value error...") except ValueError:print("V…...

Unity中实现ShaderToy卡通火(总结篇)

文章目录 前言一、把卡通火修改为后处理效果1、在Shader属性面板定义属性接收帧缓存纹理2、在片元着色器对其纹理采样后&#xff0c;与卡通火相加输出请添加图片描述 二、我们自定义卡通火1、修改 _CUTOFF 使卡通火显示在屏幕两侧2、使火附近屏幕偏红色 前言 在之前的文章中&a…...

等保2.0的变化

1法律地位得到确认 《中华人民共和国网络安全法》第21条规定“国家实行网络安全等级保护制度”&#xff0c;要求“网络运营者应当按照网络安全等级保护制度要求&#xff0c;履行安全保护义务”&#xff1b;第31条规定“对于国家关键信息基础设施&#xff0c;在网络安全等级保护…...

漏洞复现-网神SecGate3600防火墙敏感信息泄露漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

ArkTS入门

代码结构分析 struct Index{ } 「自定义组件&#xff1a;可复用的UI单元」 xxx 「装饰器&#xff1a;用来装饰类结构、方法、变量」 Entry 标记当前组件是入口组件&#xff08;该组件可被独立访问&#xff0c;通俗来讲&#xff1a;它自己就是一个页面&#xff09;Component 用…...

JS中for循环之退出循环

我为大家介绍一下退出循环的两种方法 1.continue 退出本次循环&#xff0c;一般用于排除或者跳过某一个选项的时候&#xff0c;可以使用continue for(let i 0;i<5;i){if(i 3){continue}// 跳过了3console.log(i) //0 1 2 4}2.break 退出整个for循环&#xff0c;一般用于…...

《Global illumination with radiance regression functions》

总结一下最近看的这篇结合神经网络的全局光照论文。 论文的主要思想是利用了神经网络的非线性特性去拟合全局光照中的间接光照部分&#xff0c;采用了基础的2层MLP去训练&#xff0c;最终能实现一些点光源、glossy材质的光照渲染。为了更好的理解、其输入输出表示如下。 首先…...

华南理工C++试卷

诚信应考 , 考试作弊将带来严重后果&#xff01; 《C程序设计试卷》 注意事项&#xff1a;1. 考前请将密封线内填写清楚&#xff1b; 2. 所有答案请答在试卷的答案栏上&#xff1b; 3&#xff0e;考试形式&#xff1a;闭卷 4. 本试卷共 五 大题&#xff0c;满分100分&#xff…...

0001.WIN7(64位)安装ADS1.2出现L6218错误

用了十多年的笔记本电脑系统出现问题&#xff0c;硬件升级重装以后安装ADS1.2。在编译代码的时候出现L6218错误。如下&#xff1a; 图片是从网上找的&#xff0c;我编译出错的界面没有保留下来。 首先&#xff0c;代码本身没有任何问题 &#xff0c;代码在win7(32位)下编译没有…...

HBuilderX 配置 夜神模拟器 详细图文教程

在电脑端查看App的效果&#xff0c;不用真机调试&#xff0c;下载一个模拟器就可以了 --- Nox Player&#xff0c;夜神模拟器&#xff0c;是一款 Android 模拟器。他的使用非常安全&#xff0c;最重要的是完全免费。 一. 安装模拟器 官网地址&#xff1a; (yeshen.com) 二.配…...

10、神秘的“位移主题”

神秘的“位移主题” 1、什么是位移主题2、位移主题的消息格式3、位移主题是怎么被创建的4、什么地方会用到位移主题5、位移主题的删除机制 本章主题是&#xff1a;Kafka 中的内部主题&#xff08;Internal Topic&#xff09;__consumer_offsets。 __consumer_offsets 在 Kafka …...

【Linux】dump命令使用

dump命令 dump命令用于备份文件系统。使用dump命令可以检查ext2/3/4文件系统上的文件&#xff0c;并确定哪些文件需要备份。这些文件复制到指定的磁盘、磁带或其他存储介质保管。 语法 dump [选项] [目录|文件系统] bash: dump: 未找到命令... 安装dump yum -y install …...

使用 TensorFlow 创建生产级机器学习模型(基于数据流编程的符号数学系统)——学习笔记

资源出处&#xff1a;初学者的 TensorFlow 2.0 教程 | TensorFlow Core (google.cn) 前言 对于新框架的学习&#xff0c;阅读官方文档是一种非常有效的方法。官方文档通常提供了关于框架的详细信息、使用方法和示例代码&#xff0c;可以帮助你快速了解和掌握框架的使用。 如…...

vue实现悬浮窗拖动的自定义指令

首先在自己的项目根目录下建一个 src --> config --> drag.js 然后在main.js中全局引入 //鼠标拖动 import drag from /config/drag; Vue.use(drag); drag.js文件相关代码 import Vue from vue; //使用Vue.directive()定义一个全局指令 //1.参数一&#xff1a;指令的…...

gitee(ssh)同步本地

一、什么是码云 gitee Git的”廉价平替” > 服务器在国内&#xff0c;运行不费劲 在国内也形成了一定的规模 git上的一些项目插件等在码云上也可以找得到 二、创建仓库 三、删除仓库 四、仓库与本地同步 > 建立公钥 五、把仓库同步到本地 六、在本地仓库中创建vue项目…...

Redis新数据类型-Bitmaps

目录 Bitmaps 简介 命令 1. setbit (1) 格式 (2) 实例 2. getbit (1) 格式 (2) 实例 3. bitcount (1) 格式 (2) 实例 4. bitop (1) 格式 (2) 实例 我的其他博客 Bitmaps 简介 Bitmaps 是 Redis 的一种新数据类型&#xff0c;它是一种用于存储位信息的数据结构&…...

web前端之vue组件传参、各种传参的不同写法、语法糖

MENU vue2refemit vue3语法糖refemit(一)语法糖(二) vue2 refemit 子组件 <template><div><el-dialogtitle"新增":visible.sync"dialogFormVisible"close"handleClose"><el-form :model"form"><el-form…...

基于Nexus搭建Maven私服基础入门

什么是Nexus&#xff1f;它有什么优势&#xff1f; 要了解为什么需要nexus的存在&#xff0c;我们不妨从以下几个问题来简单了解一下: 为什么需要搭建私服&#xff1f;如果没有私服会出现什么问题&#xff1f; 对于企业开发而言&#xff0c;如果没有私服&#xff0c;我们所有…...

JavaScript自执行函数:用途、好处

JavaScript中的自执行函数是一个常见的编程技巧&#xff0c;它可以在特定的场景中发挥重要作用。本文将介绍自执行函数的用途、好处&#xff0c;并提供代码示例进行说明。 引言 在JavaScript编程中&#xff0c;自执行函数是一种特殊的函数调用方式&#xff0c;它能够在定义后…...

Git使用无法拉取

错误提示&#xff1a; error setting certificate verify locations: CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt CApath: none 问题原因&#xff1a; 这个问题是因为git配置里crt证书的路径不正确导致的 解决办法&#xff1a; 这个路径配置是在C:\Pro…...

来聊聊CAS

什么是CAS CAS全称Compare-And-Swap&#xff0c;是一种无锁编程算法&#xff0c;即比较当前的值与旧值是否相等若相等则进行修改操作(乐观锁机制)&#xff0c;该类常用于多线程共享变量的修改操作。而其底层实现也是基于硬件平台的汇编指令&#xff0c;JVM只是封装其调用仅此而…...

【EventBus】EventBus源码浅析

二、EventBus源码解析 目录 1、EventBus的构造方法2、订阅者注册 2.1 订阅者方法的查找过程2.2 订阅者的注册过程1. subscriptionsByEventType 映射&#xff1a;2. typesBySubscriber 映射&#xff1a;2.3 总结订阅者的注册过程 3、事件的发送 3.1 使用Post提交事件3.2 使用p…...

Buck电源设计常见的一些问题(二)MOS管炸机问题

MOS管炸机问题 1.概述2.MOS管的相关参数3.过电压失效4.过电流失效5.静电放电和热失效1.概述 在我们做电源产品或者电机控制器时候,经常会坏MOS管。我相信90%以上的硬件工程师在职场生涯中都会遇到这类问题。然而这类问题也总是让人防不胜防。经常我们都会开玩笑的说,没烧过管…...

Javascript高频面试题

系列文章目录 文章目录 系列文章目录前言1.JavaScript常见数据类型null 和 undefind区别symbol&#xff08;ES6新增&#xff09;、bigInt&#xff08;ES10新增&#xff09; 2.JavaScript判断数据类型的方式3. 和 区别&#xff0c;分别在什么情况使用&#xff1f;4.变量声明 va…...

锁--07_2---- index merge(索引合并)引起的死锁

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 案例分析生产背景死锁日志表结构执行计划 EXPLAN为什么会用 index_merge&#xff08;索引合并&#xff09;为什么用了 index_merge就死锁了解决方案注&#xff1a;M…...

后端打印不了trace等级的日志?-SpringBoot日志打印-Slf4j

在调用log变量的方法来输出日志时&#xff0c;有以上5个级别对应的方法&#xff0c;从不太重要&#xff0c;到非常重要 调用不同的方法&#xff0c;就会输出不同级别的日志。 trace&#xff1a;跟踪信息debug&#xff1a;调试信息info&#xff1a;一般信息warn&#xff1a;警告…...

声明式编程Declarative Programming

接下来要介绍第五种编程范式 -- 声明式编程。分别从它的优缺点、案例分析和适用的编程语言这三个方面来介绍这个歌编程范式。 声明式编程是一种编程范式&#xff0c;其核心思想是通过描述问题的性质和约束&#xff0c;而不是通过描述解决问题的步骤来进行编程。这与命令式编程…...

人工智能与天文:技术前沿与未来展望

人工智能与天文&#xff1a;技术前沿与未来展望 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域的应用越来越广泛。在天文领域&#xff0c;AI也发挥着越来越重要的作用。本文将探讨人工智能与天文学的结合&#xff0c;以及这种结合带…...

俄罗斯做电商网站/谷歌关键词搜索量数据查询

1.#列表可重复&#xff0c;类型不同&#xff0c;用&#xff3b;&#xff3d;表示 listA [a, b, c, 1, 2] # 遍历list for item in listA:print(item)#元组是只读的&#xff0c;不能修改。元组用“()”表示 tuple1 (1,2,a,4,5,6) for item in tuple1:print(item)#字典定义了键…...

消费金融网站建设/aso优化师

对用户的行为进行分析得到用户的偏好后&#xff0c;可以根据用户的偏好计算相似用户和物品&#xff0c;然后可以基于相似用户或物品进行推荐。这就是协同过滤中的两个分支了&#xff0c;即基于用户的协同过滤和基于物品的协同过滤。 关于相似度的计算&#xff0c;现有的几种方法…...

三沙网站设计公司/产品推广计划怎么写

目录 第一题&#xff1a;文件内容复制 第二题&#xff1a;分析学生成绩 第三题&#xff1a;统计文本中每个字母出现的次数 第一题&#xff1a;文件内容复制 首先在自己编辑器目录下手动创建一个txt文件并命名为 input_1.txt &#xff0c;文件内容如下&#xff1a; 轻轻的我…...

统计wordpress/成都谷歌seo

分析 它居然真的是个nlog^3暴力&#xff1f;&#xff01; 两个数在加小于min(lowbit(x),lowbit(y))的数时对他们的奇偶性不影响 因此每次加上min(lowbit(x),lowbit(y))判断此时的奇偶性 直接排序即可 代码 #include<bits/stdc.h> using namespace std; #define int long …...

徐州有哪些制作网站的公司/seo流量排名工具

Jquery Mobile中pageinit等函数执行两次的问题【终极解决】参考文章&#xff1a; &#xff08;1&#xff09;Jquery Mobile中pageinit等函数执行两次的问题【终极解决】 &#xff08;2&#xff09;https://www.cnblogs.com/langu/p/3914987.html 备忘一下。...

汉川建设局网站/营销顾问公司

先看看网上的方法是怎么样的&#xff1a; implementation (com.android.support:support-fragment:28.0.0){exclude group: "com.android.support",module: versionedparcelable}是我盲区&#xff0c;上述对我无效&#xff0c;没能解决&#xff0c;当场哭了 我们来看…...