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

2023-12-14 15:55:06

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 文档以获取更多详细信息。

文章来源:https://blog.csdn.net/qingxiao__123456789/article/details/134872717
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。