GDB 远程调试简介

文章目录

  • 1. 前言
  • 2. GDB 远程调试
    • 2.1 准备工作
      • 2.1.1 准备 `客户端 gdb` 程序
      • 2.1.2 准备 `服务端 gdbserver`
      • 2.1.3 准备 被调试程序
    • 2.2 调试
      • 2.2.1 通过网络远程调试
        • 2.2.1.1 通过 gdbserver 直接启动程序调试
        • 2.2.1.2 通过 gdbserver 挂接到已运行程序调试
      • 2.2.2 通过串口远程调试
        • 2.2.1.1 通过 gdbserver 直接启动程序调试
        • 2.2.1.2 通过 gdbserver 挂接到已运行程序调试
  • 3. 参考资料

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. GDB 远程调试

GDB 远程调试同时需要 服务端 gdbserver客户端 gdb 两个程序。本文以 ARM32 嵌入式设备内程序的调试为例,对 GDB 远程调试方法进行说明。

先对 服务端 gdbserver客户端 gdb 连接拓扑做一个梗概描绘:
在这里插入图片描述

2.1 准备工作

2.1.1 准备 客户端 gdb 程序

客户端 gdb 通过和 服务端 gdbserver 的交互,对运行于目标机器的程序进行调试。笔者使用 Ubuntu 系统作为调试客户端的宿主机,即 客户端 gdb 运行于 Ubuntu 下。

笔者测试使用的嵌入式设备 SDK 的交叉编译工具链已经包含了 客户端 gdb 程序,无需额外准备:

$ arm-linux-gnueabihf-gdb --version
GNU gdb (Linaro GDB 2016.02) 7.10.1.20160210-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://bugs.launchpad.net/gcc-linaro>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

如果读者的交叉编译工具链没有包含 gdb,在 Ubuntu 下可通过命令安装适用于多架构平台的 gdb 客户端程序

sudo apt-get install gdb-multiarch

2.1.2 准备 服务端 gdbserver

gdbserver 运行于被调试的目标机器,在本文中目标机器指 ARM 嵌入式设备。笔者是通过 buildroot 构建的 gdbserver,不想使用 buildroot 的读者,可自行查阅相关资料进行 gdbserver 的构建。

构建好 gdbserver 后,将其拷贝到目标机器。笔者是将其拷贝到目标机器/usr/bin 目录,这样可以不用指定路径运行。

2.1.3 准备 被调试程序

/* test.c */#include <unistd.h>int main(void)
{while (1)sleep(5);return 0;
}

编译,然后将测试程序 test 拷贝到目标机器

$ arm-linux-gnueabihf-gcc -o test test.c

2.2 调试

2.2.1 通过网络远程调试

在这里插入图片描述

2.2.1.1 通过 gdbserver 直接启动程序调试

首先,在目标机器(本文是指 ARM32 嵌入式设备)上运行命令:

# gdbserver :2345 test 
Process test created; pid = 440
Listening on port 2345

然后,在调试器客户端机器(本文是指 Ubuntu)上运行下列命令:

$ arm-linux-gnueabihf-gdb
GNU gdb (Linaro GDB 2016.02) 7.10.1.20160210-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://bugs.launchpad.net/gcc-linaro>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) target remote 192.168.3.8:2345
Remote debugging using 192.168.3.8:2345
Reading /root/test from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /root/test from remote target...
Reading symbols from target:/root/test...done.
Reading /lib/ld-linux-armhf.so.3 from remote target...
Reading /lib/ld-linux-armhf.so.3 from remote target...
Reading symbols from target:/lib/ld-linux-armhf.so.3...(no debugging symbols found)...done.
0xb6fd7a00 in _start () from target:/lib/ld-linux-armhf.so.3
(gdb)

客户端宿主机(本文指 Ubuntu)启动 arm-linux-gnueabihf-gdb 后,通过命令 target remote 192.168.3.8:2345 连接到目标机器。其中,192.168.3.8 是目标机器的的 IP。

这时候,目标机器(本文是指 ARM 嵌入设备)会输出 gdb 客户端连接的消息 Remote debugging from host 192.168.3.168

# gdbserver :2345 test 
Process test created; pid = 440
Listening on port 2345
Remote debugging from host 192.168.3.168

到此,就可以通过 gdb 在客户端宿主机(本文指 Ubuntu),调试目标机器(本文是指 ARM 嵌入设备)的 test 程序了。

2.2.1.2 通过 gdbserver 挂接到已运行程序调试

如果 test 已经运行,可以通过 attach 方式启动 gdbserver,挂接到 test 程序进行调试。

先在目标机器(本文是指 ARM32 嵌入式设备)上启动 test 程序,放入后台运行:

# ./test &
# ps -ef | grep -v grep | grep "test"445 root     ./test

gdbserver 挂接到 test 进程:

# gdbserver --attach :2345 445
Attached; pid = 445
Listening on port 2345

客户端宿主机(本文指 Ubuntu)启动 arm-linux-gnueabihf-gdb,然后通过命令 target remote 192.168.3.8:2345 连接到目标机器调试程序:

$ arm-linux-gnueabihf-gdb
GNU gdb (Linaro GDB 2016.02) 7.10.1.20160210-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://bugs.launchpad.net/gcc-linaro>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) target remote 192.168.3.8:2345
Remote debugging using 192.168.3.8:2345
Reading /root/test from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
Reading /root/test from remote target...
Reading symbols from target:/root/test...done.
Reading /lib/libc.so.6 from remote target...
Reading /lib/ld-linux-armhf.so.3 from remote target...
Reading symbols from target:/lib/libc.so.6...(no debugging symbols found)...done.
Reading symbols from target:/lib/ld-linux-armhf.so.3...(no debugging symbols found)...done.
Reading /lib/ld-linux-armhf.so.3 from remote target...
0xb6e9e134 in nanosleep () from target:/lib/libc.so.6
(gdb)

2.2.2 通过串口远程调试

在这里插入图片描述

2.2.1.1 通过 gdbserver 直接启动程序调试

目标机运行命令:

gdbserver /dev/ttyS1 test

其中,/dev/ttyS1目标机上和客户端宿主机连接的串口设备对象。

客户端宿主机运行命令:

$ arm-linux-gnueabihf-gdb
[......]
(gdb) target remote /dev/ttyUSB0

其中,/dev/ttyUSB0客户端宿主机上和目标机连接的串口设备对象。

2.2.1.2 通过 gdbserver 挂接到已运行程序调试

目标机上依次运行下列命令:

# test &
# ps -ef | grep -v grep | grep "test" ## 查询 test 进程 PID
# gdbserver --attach /dev/ttyS1 445

客户端宿主机运行命令:

$ arm-linux-gnueabihf-gdb
[......]
(gdb) target remote /dev/ttyUSB0

3. 参考资料

[1] Using the gdbserver program
[2] gdbserver(1) — Linux manual page

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

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

相关文章

如何快速申请免费SSL证书,实现网站HTTPS安全传输

随着互联网技术的飞速发展&#xff0c;网络安全已成为不可忽视的重要议题。HTTPS协议&#xff0c;作为HTTP协议的安全版本&#xff0c;通过SSL协议加密客户端与服务器之间的数据传输&#xff0c;从而保障信息在传输过程中的安全性。对于网站运营者而言&#xff0c;为网站部署SS…

违规停放智能监测摄像机

对于现代城市管理来说&#xff0c;违规停放智能监测摄像机正逐渐成为解决交通拥堵和城市管理难题的重要工具。这类摄像机通过先进的视觉识别和数据分析技术&#xff0c;有效监控和管理道路上的车辆停放行为&#xff0c;对提升城市交通运行效率和改善市民出行环境具有显著的意义…

三代测序PacBioONT reads过滤和修剪-Chooper

chopper简介 chopper是NanoFilt和NanoLyse的Rust语言版本&#xff0c;适用于长reads测序&#xff08;如PacBio和纳米孔测序ONT&#xff09;的过滤和修剪fastq文件。 chopper相对于python编写的NanoFilt和NanoLyse&#xff0c;运行输出相同结果的时间更短&#xff0c;且NanoFi…

思维,CF 739A - Alyona and mex

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 739A - Alyona and mex 二、解题报告 1、思路分析 我们考虑区间mex运算的值最大也就是区间长度&#xff0c;所以我们最大值的上界就是所有区间中的最小长度&#xff0c;假如记为mi 我们一定可以构造出答案…

zabbix 配置钉钉告警

1.申请一个钉钉企业版 2.群内申请一个机器人 下载电脑版钉钉&#xff0c;登录后&#xff0c;在要接收群消息的群里&#xff0c;点击右上角设置图标&#xff0c;下滑找到机器人&#xff0c;添加一个机器人&#xff0c;保存机器人的webhook地址 保存这里的加签字符串 保存这里的…

通信软件开发之业务知识:PON口割接什么意思?

一 PON口割接&#xff08;原创总结&#xff09; 在通信领域&#xff0c;PON口割接指的是对无源光网络&#xff08;Passive Optical Network&#xff0c;PON&#xff09;端口进行的切换或调整操作。简单来说&#xff0c;就是对光纤网络中的某个端口进行重新连接或重新分配&…

153. 寻找旋转排序数组中的最小值(中等)

153. 寻找旋转排序数组中的最小值 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;153. 寻找旋转排序数组中的最小值 2.详细题解 如果不考虑 O ( l o g n ) O(log n) O(logn)的时间复杂度&#xff0c;直接 O ( n ) O(n) O(n)时间复杂…

【Hugging Face全面拥抱LangChain:全新官方合作包】

文末有福利&#xff01; ❝ 最近Hugging Face官宣发布langchain_huggingface&#xff0c;这是一个由 Hugging Face 和 LangChain 共同维护的 LangChain 合作伙伴包。这个新的 Python 包旨在将 Hugging Face 最新功能引入 LangChain 并保持同步。 通过Hugging Face官方包的加持&…

14-15 为什么我们现在对阅读如此难以接受

写出来感觉很奇怪&#xff0c;但最近我感觉自己失去了阅读能力。长篇文本对我来说尤其具有挑战性。句子很难读完。更别提章节了。章节有很多段落&#xff0c;而段落又由许多句子组成。 啊。 即使在极少数情况下&#xff0c;我读完了一章&#xff0c;下一页上已经有另一章等着…

有sdwan可以不用专线吗?sdwan和专线的区别优势

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;确实可以在很大程度上替代传统的专线连接&#xff0c;尤其是在追求成本效益和网络灵活性的场景下。SD-WAN的核心优势在于其智能化和自动化的能力&#xff0c;这使得它能够优化数据…

华清远见人工智能课程:项目优势助力,学习更高效!

在人工智能飞速发展的今天&#xff0c;学习人工智能成为新的高薪赛道。我们都知道人工智能的学习离不开项目练手&#xff0c;只有通过实际项目的操作&#xff0c;才能真正掌握人工智能的核心技能。但遗憾的是&#xff0c;很多人工智能课程只注重理论知识的传授&#xff0c;缺乏…

本地文件上传Github的方法

本文仅用于个人回忆本地文件上传GitHub方法&#xff0c;使用HTTP上传而不是SSH&#xff0c;其余文件已配置完成&#xff0c;如果你和我一样&#xff0c;那么请往下看&#xff0c;这条博客不说废话。 Step1 选择需要上传的文件&#xff0c;右键选择Git Bash Here Step2 创建一…

GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记

文章目录 概览&#xff1a;游戏引擎中的渲染系统四个课时概览 一&#xff0c;渲染管线流程二&#xff0c;了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三&#xff0c;可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四&#xff0c;纹理压…

电路模型和电路定律

电路---为了某种需要由某些电工设备或元件按一定方式组合起来的电流的通路 实际电路的两个作用 1.电能的传输&#xff0c;分配和转换 2.传递和处理信号 电路中的几个基本概念 激励---电源或信号源的电压或电流&#xff0c;也称为输入 响应---由激励在电路各部分产生的电流…

怎么参与场外期权?

今天期权懂带你了解怎么参与场外期权&#xff1f; 目前个人投资者暂时还不能直接参与场外个股期权&#xff0c;因为场外个股期权现在只能机构来进行交易。 所以个人投资者目前只能通过机构通道来进行操作&#xff0c;类似期权懂&#xff0c;找到期权懂经理&#xff0c;然后通…

手机删除的照片怎么找回?3个急救指南,让你重新拥有

一不小心手滑&#xff0c;手机里的几百张珍贵照片就消失了&#xff01;是不是心如刀割&#xff0c;感觉错过了几个亿&#xff1f;手机删除的照片怎么找回&#xff1f;别担心&#xff0c;小菜一碟&#xff0c;恢复照片就像打游戏一样&#xff0c;只要掌握正确的“攻略”&#xf…

AI大模型时代来临:企业如何抢占先机?

AI大模型时代来临:企业如何抢占先机? 2023年,被誉为大模型元年,AI大模型的发展如同一股不可阻挡的潮流,正迅速改变着我们的工作和生活方式。从金融到医疗,从教育到制造业,AI大模型正以其强大的生成能力和智能分析,重塑着行业的未来。 智能化:企业核心能力的转变 企…

世界智能产业博览会开幕 - 天空卫士汽车行业方案入选优秀案例

6月20日&#xff0c;以“智行天下、能动未来”为主题的2024世界智能产业博览会在国家会展中心&#xff08;天津&#xff09;开幕。主席向博览会致贺信并指出&#xff1a;中国高度重视人工智能发展&#xff0c;积极推动互联网、大数据、人工智能和实体经济深度融合&#xff0c;培…

[Python学习篇] Python函数

定义函数 语法&#xff1a;使用关键字 def def 函数名(参数): 代码1 代码2 ...... 调用函数 语法&#xff1a; 函数名(参数) 注意&#xff1a;不同的需求&#xff0c;参数可有可无。在Python中&#xff0c;函数必须先定义后使用 示例&#xff1a; # 定义函数 d…

csdn如何建立专栏,并且把已发布的文章,放到专栏里

不会在csdn上建立专栏&#xff0c;管理自己的博客&#xff1f; 建立了专栏&#xff0c;不知道该怎么放入文章&#xff1f; 本文将一步步带你解决这些问题。 我是蚊子码农&#xff0c;欢迎各位的点赞、关注和收藏&#xff0c;有了你们的激励&#xff0c;我会带来更好的作品。…