Ubuntu环境下使用GDB调试C语言项目

news2024/11/16 8:34:13

1. 安装gdb
//终端输入
sudo apt-get install gdb
2. 启动gdb
gdb

GDB常用命令大全,参考此篇博客

使用GDB调试C项目中的makefile

1.在内核配置中启用调试信息: 在内核配置中,确保启用了调试信息。可以通过以下步骤来配置内核:

make menuconfig

报错:make: *** 没有规则可制作目标“menuconfig”。 停止。参考1、参考2.

安装libncurses5-dev命令:apt-get install libncurses5-dev

补充其他包:sudo apt-get install build-essential kernel-package libncurses5-dev libssl-dev

There are services installed on your system which need to be restarted when certain libraries, such as libpam, libcYou can choose this option to avoid being prompted; instead, all necessary
Restart services during package upgrades without asking?

您的系统上安装了一些服务,当某些库(如libpam、libc)时,这些服务需要重新启动。您可以选择此选项以避免出现提示;相反,在包升级期间无需询问即可重新启动所有必要的服务?

可根据实际情况选择,这里选择的是“否”,然后又有个弹框按“esc”键即可。

ubuntu18.04.1安装linux内核源码命令:

1.查看已安装的内核版本: 首先,查看当前系统安装的内核版本。您可以使用以下命令:

uname -r

记下内核版本号,例如 4.15.0-213-generic

下载内核源码:
使用 apt-get 工具下载相应内核版本的源码。确保您已经安装了 linux-source 包。

sudo apt-get update
sudo apt-get install linux-source

此命令将下载并解压缩内核源码,存储在 /usr/src 目录中。

进入源码目录:
进入 /usr/src 目录,您将在其中找到解压缩后的内核源码目录。

cd /usr/src

创建符号链接:
为了使内核源码目录更易于访问,您可以创建一个符号链接。请将 <version> 替换为您上面记下的内核版本号。

sudo ln -s linux-source-<version> linux

这将创建一个名为 linux 的符号链接,指向内核源码目录。

现在,您就可以在 /usr/src/linux 中找到相应版本的内核源码。请注意,如果需要进行内核模块的编译和调试,您可能还需要安装与当前内核版本匹配的 linux-headers 包。

安装完内核后:进入/usr/src中查看下载好的源码文件,终端输入:tar xvjf linux-source-4.15.0.tar.bz2 -C /home/kernel

将文件解压到/home/kernel目录下。

报错:tar: /home/kernel:无法 open: 没有那个文件或目录
tar: Error is not recoverable: exiting now

自己在/home下创建一个kernel目录即可。

整个显示界面大致分为三部分,上方是操作的说明和图例说明。

<Enter> 按下Enter键进入子菜单。

<Y> 按下Y键,选中这项功能。

<N> 按下N键,排除这项功能 。

<M> 按下M键,以模块的形式选择。

<Esc><Esc> 按两下Esc键,返回上一级菜单

<?> 按下?键,查看高亮功能的帮助信息

</> 按下/键,搜索

[*] 被选中的项目

[ ] 未被选择的项目

<M> 以模块形式被选择的项目

< > 未被选择的模块

5. menuconfig 功能简述 — [野火]OpenWrt用户手册—基于LubanCat-RK系列板卡 文档

重新在内核配置中启用调试信息: 在内核配置中,确保启用了调试信息。可以通过以下步骤来配置内核:

在配置菜单中,选择:

Kernel hacking -->
    Compile-time checks and compiler options -->
        [*] Compile the kernel with debug info

构建内核: 重新构建内核以包括新的调试信息。

make -jX

使用使用 nproc 命令查看CUP内核数目,还可以使用 lscpu 命令来获取有关 CPU 的详细信息。

其中 X 是您系统上可用的 CPU 核心数量。然后安装新的内核。

make modules_install
make install

运行命令make modules_install报错:make: *** 没有规则可制作目标“modules_install”。 停止。

重启系统:
选择新内核并重启系统。

加载内核模块:
加载您的内核模块。

insmod your_module.ko

为 GDB 启用调试符号:
在构建内核模块时,确保生成了包含调试信息的模块文件。这通常是 .ko 文件,但可能具有调试信息的 .ko 文件会有一个 .debug 扩展。

用 GDB 调试:
打开 GDB 并加载内核模块文件:

gdb /path/to/vmlinux

在 GDB 中运行以下命令:

target remote :<port>

其中 <port> 是用于内核调试的端口。

add-symbol-file /path/to/your_module.ko <load-address>

其中 <load-address> 是您加载模块时报告的地址。

然后,您可以在 GDB 中设置断点、单步执行等操作。

请注意,调试内核模块可能涉及到很多特定于内核的调试技巧,具体取决于您的内核版本和配置。确保查阅相关的内核文档和 GDB 文档以获取更多详细信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp 蓝牙小程序-兼容安卓和iOS

withTimeout方法可以在搜寻设备时等待指定的秒数&#xff0c;如果30秒内未搜索到则取消搜索 /*** 超时控制函数* param {Promise} promise 回调函数* param {number} timeout 超时时间, 默认10s*/ export function withTimeout(promise, timeout 10000) {let timeoutEvent …

FFmpeg的AVFilter框架总成AVFilter-AVFilterContext

毫无疑问&#xff0c;还是和前面的一样一个context和一个包含有回调函数指针的插件结构体&#xff0c;想要实现自己的插件&#xff0c;主要实现里面的回调函数就可以了&#xff0c;当然&#xff0c;AVFilter比其它模块稍微复杂一点还要牵扯到其它一些辅助模块&#xff0c;在其它…

华为OD试题六(数据最节约的备份方法、TLV解码)

1. 数据最节约的备份方法 题目描述&#xff1a; 有若干个文件&#xff0c;使用刻录光盘的方式进行备份&#xff0c;假设每张光盘的容量是500MB&#xff0c;求 使用光盘最少的文件分布方式 所有文件的大小都是整数的MB&#xff0c;且不超过500MB&#xff1b;文件不能分割、分卷…

elementui select中添加新增标签

<el-select v-model"ruleForm.eventType" :placeholder"请选择事件类型&#xff0c;可手动添加" ref"template" clearable visible-change"(v) > visibleChange(v, template)"><el-option v-for"item in eventTypeOp…

复制粘贴——QT实现原理

复制粘贴——QT实现原理 QT 剪贴板相关类 QClipboard 对外通用的剪贴板类&#xff0c;一般通过QGuiApplication::clipboard() 来获取对应的剪贴板实例。 // qtbase/src/gui/kernel/qclipboard.h class Q_GUI_EXPORT QClipboard : public QObject {Q_OBJECT private:explici…

华为OD试题五(数列描述、矩阵最大值、数据分类)

1. 数列描述 示例代码&#xff1a; # 核心 从第一项 推 第N项目 # 第一项 a0 1 # 推到 第N项 N 4 def fun(a0):# 计算每一项的具体值result left 0cursor 0while cursor < len(a0):if a0[cursor] ! a0[left]:count cursor -leftresult "{}{}".format(str(…

2.2 模型基础

建模流程 作业 这次搞了10天左右终于把作业做完了。 先是去学习了下如何建模->然后将模型导入Substance Painter里绘制贴图->最后导入到unity中&#xff08;虽然最后效果很差&#xff09;&#xff0c;但是回过头来看整个过程学习到了次时代美术的工作流&#xff0c;思考…

智慧公交:提高城市出行效率的数字化之路

随着城市化进程的不断加速&#xff0c;公共交通成为人们日常出行的主要方式之一。为了提高公共交通的效率和服务质量&#xff0c;智慧公交应运而生。智慧公交是一种基于物联网、大数据、人工智能等技术&#xff0c;对公共交通进行数字化、智能化改造的新型公共交通系统。 以此为…

[Kubernetes]1.Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群

一. Kubernetes(K8S)简介 Kubernetes (K8S) 是一个为 容器化应用 提供 集群部署 和 管理 的开源工具,和docker swarm类似,由 Google 开发. Kubernetes 这个名字源于希腊语,意为 “ 舵手 ” 或 “ 飞行员 ” , k8s 这个缩写是因为 k 和 s 之间有八个字符的关系, Google…

【Jmeter】Jmeter基础8-Jmeter元件介绍之断言

断言主要用于对服务器响应的数据做验证。Jmeter提供了多个断言元件&#xff0c;其中最常用的是响应断言。 2.8.1、响应断言 作用&#xff1a;对Jmeter取样器返回值进行断言。参数说明&#xff1a; 测试字段 响应文本&#xff1a;从服务器返回的响应文本&#xff0c;Response B…

Nacos-NacosRule 负载均衡—设置集群使本地服务优先访问

userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 NacosRule 权重计算方法 目录 一、介绍 二、示例&#xff08;案例截图&#xff09; 三、总结 一、介绍 NacosRule是AlibabaNacos自己实现的一个负载均衡策略&…

白日门引擎传奇手游架设教程-GM的成长之路

准备工具 服务器一台&#xff08;Windows系统&#xff09;白日门引擎服务端版本一个 前言&#xff1a; 此次教程使用的是版本是一个决战斗罗的一个版本、服务器使用的是驰网科技的游戏高频系列服务器。 教程开始 在我们拿到版本之后、我们需要先把版本解压到服务器D盘的根目录…

关于impdp导入时候索引是否使用了并行了?

关于impdp导入时候索引是否使用了并行的问题&#xff0c;不是看sqlfile&#xff0c;而是看实际worker 参看&#xff1a;Impdp Parallel Index Creation Always Creates Indexes with Degree 1 (Doc ID 1289032.1&#xff09; Oracle Database - Enterprise Edition - Version …

雅典娜Athena-signa音频算法源码与麦克风阵列角度定义互换问题

雅典娜Athena-signa音频算法源码与麦克风阵列角度定义互换问题 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 1 dios_ssp_doa_api.c 2 公…

【python VS vba】(8) 在python使用matplotlib库来画图

目录 1 matplotlib的基本用法 1.1 需要用到的模块&#xff0c;需要实现安装&#xff0c;且导入 1.2 画布 figure 1.2.1 figure的官方解释 1.2.2 画布语法 1.2.3 必须先获取至少1个figure: 1.2.4 figure的生效范围与多个figure 1.2.5 可以设置多个画布 1.3 设置函数…

创业就做轻资产 低门槛高收益的创业项目

1.在创业之前&#xff0c;首先要找对方向 所谓方向就是根据经济环境和市场分析&#xff0c;哪个行业最赚钱&#xff0c;哪个产品市场需求量大&#xff0c;竞争力下&#xff0c;发展前景好&#xff0c;可以实现长期收益。 2.清晰地思考商业摸式&#xff0c;建立盈利循环 例如&…

排序算法(详解)

排序在日常生活中十分重要&#xff0c;购物平台上商品的排序&#xff0c;各国高校等级的排序......可以说&#xff0c;现代生活中已经离不开排序了&#xff1b;因此学好排序算法至关重要&#xff0c;本篇文章就来讲讲常见的排序算法 排序的种类非常多&#xff0c;按照种类划分&…

AI数字人克隆采集规范分享!

数字人直播的时代已经来临&#xff0c;使用青否数字人SaaS系统数字人源码&#xff1a;zhibo175&#xff09;去生成数字人&#xff0c;那如何能得到自己想要的效果呢&#xff1f;需要注意一下几点&#xff1a; 一.摄影棚灯光方案 中型(15m左右)摄影棚​ 适用于美妆/珠宝等直播&a…

Rust语言抓取在线考试平台的专业试题数据

不管你是学车也好&#xff0c;还是考各类证书&#xff0c;都离不开刷题&#xff0c;有些题库都是需要收费的&#xff0c;而且市面平台那么多&#xff0c;想要刷更多的题只能下载很多不同APP&#xff0c;因此&#xff0c;我写了一个Rust爬取试题的爬虫&#xff0c;将更多的分散的…

从 enable_if 了解模板元编程

前言 在阅读学习 ZLToolKit 源码时&#xff0c;从如下一段代码中了解到 enable_if 和 SFINAE 的概念&#xff0c;从而引入了对模板元编程的了解。 template<class R, class... ArgTypes> class TaskCancelableImp<R(ArgTypes...)> : public TaskCancelable { pub…