IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux下的gdb调试 -> 正文阅读

[系统运维]Linux下的gdb调试

第二章 用户态程序gdb调试



前言

用户态程序在运行过程中可能会出现异常的工作状态,此时通过特定的方式可以定位程序出错的原因,该方式的其中一种就是可以使用gdb调试。


一、嵌入式设备调试-gdbserver

嵌入式设备因其资源短缺问题,基本不会将调试相关的环境放置在系统中,从而没法直接在设备上运行gdb等调试工具,这时就需要gdbserver等服务器软件在系统中部署,从而将客户端放在可以调试的环境机器中,远程对嵌入式设备进行调试。

1.准备事项

  • 调试程序需要添加调试参数,如C语言程序需要添加-g参数,从而使调试程序中有需要的符号表
  • 在目标机上安装gdbserver服务端软件,同时目标机中有网络或者串口
  • 在调试机中安装gdb软件,同时调试机可以通过串口或者网络访问到目标机
  • 调试机中放有被调试程序需要的所有的运行环境库

2.gdbserver通信方式

  • 串口通信(COMM):使用一个tty设备和其他机器通信,如(/dev/ttyUSB0)
  • 网口通信(HOST:PORT):使用TCP协议和其他机器通信,端口号自定义,如(127.0.0.1:1234),以下内容都以网口通信为例

3.常用gdbserver参数说明

  • –help
    在这里插入图片描述

打印gdbserver的使用方式和参数说明

  • –attach
    通常情况下,gdbserver启动时要指定要调试的程序执行命令,从而运行程序调试。当有这个参数时,就不需要指定执行命令,可以调试正在运行的程序,最后需要加运行程序的PID,如调试进程号为1111的进程
gdbserver --attath 127.0.0.1:1234 1111
  • –multi
    通常情况下,gdbserver启动时都要指定具体的要调试的程序。当有这个参数时,可以不指定调试程序,在gdb连接时再指定

目标机:

gdbserver --multi 127.0.0.1:1234

调试机:
(gdb) target extended-remote 127.0.0.1:1234 # 连接目标机,不能使用remote,因为remote会查找执行程序
(gdb) set remote exec-file a.out # 指定要执行的程序/bin/pwd
(gdb) file a.out # 加载a.out的符号表
(gdb) r # 执行调试程序

  • –once
    通常情况下,在客户端断开一个连接会话后,gdbserver也不会退出,继续等待下一个连接。当有这个参数,第一个会话断开连接后gdbserver就会退出
gdbserver --attath --once 127.0.0.1:1234 1111
  • –version
    显示gdbserver的版本信息

3.使用说明

  1. 目标机启动gdbserver
gdbserver 127.0.0.1:1234 ./.a.out

在这里插入图片描述

  1. 调试机启动gdb(调试机gdb为交叉编译的gdb,后面所有相同)
gdb

在这里插入图片描述

  1. 调试机连接目标机

(gdb) target remote 127.0.0.1:1234

在这里插入图片描述

在这里插入图片描述

  1. 查看符号表

(gdb) info sharedlibrary # 如果有缺失的动态库则需要添加

  1. 添加动态库,此处添加的动态库是调试机中的路径

solib-search-path设置的是被搜索文件的路径,可以有多个
(gdb) set solib-search-path . #如果当前gcc所运行的路径下存在动态库,则添加,当前路径下的子目录不查找
solib-absolute-prefix设置的是被搜索文件路径的前缀,只能有一个
(gdb) set solib-absolute-prefix /root/abc #如果/root/abc下存在需要的动态库,则添加,包含/root/abc下的子目录中的动态库

  1. 通过gdb命令进行调试

4.总结

gdbserver对gdb进行了扩充,解决了gdb只能本机调试的弊端,实现了CS模式下的gdb调试,具体的调试方式还是和gdb相同。


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:22:23  更:2022-07-04 23:22:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 19:47:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码