百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

简明易记,linux gdb命令速记手册

sinye56 2024-11-17 15:42 2 浏览 0 评论

1,启动程序

  • r(un):执行程序,如果没有设置断点,则直接把程序都执行完
  • start:执行程序到main函数后,停住。

2,常用命令

  • n(ext):下一条指令(不进入函数)
  • s(tep):进入函数
  • 回车:执行上一条命令
  • c:执行到下一个断点停住,如果后面没有断点,程序执行结束。
  • q:退出gdb

3,设置断点

  • b(reak):设置断点,b后面指定行号。
  • 指定行号
  • 指定文件名:行号
  • 指定 函数
  • 指定文件名:函数
  • 设置条件断点
  • 有个循环,当只想在循环变量i=2的时候,程序停住:【b 行号 if i == 2】
  • (gdb) info b
  • Num Type Disp Enb Address What
  • 1 breakpoint keep y 0x0000555555554748 in main at main.c:10
  • stop only if i == 2

4,查看源文件

  • l(list):查看源文件
  • 指定行号
  • 指定文件名:行号
  • 指定 函数
  • 指定文件名:函数

5,查看设置了哪些断点

  • info b

6,删除断点

  • d (el)断点的号码

例子:先用info b查看有哪些断点,注意Num列,如果想删除【src/add.c:4】处的断点,就执行【d 2】

(gdb) info b

Num Type Disp Enb Address What

2 breakpoint keep y 0x0000555555554667 in add at src/add.c:4

3 breakpoint keep y 0x000055555555468b in main at main.c:5

删除3号(src/add.c:4处的)断点:

(gdb) d 2

再用info b看看,发现2号断点没有了。

(gdb) info b

Num Type Disp Enb Address What

3 breakpoint keep y 0x000055555555468b in main at main.c:5

7,查看变量的值和变量的类型

  • 查看任何东西(变量/函数等)的值:p
  • 查看任何东西(变量/函数等)的类型:ptype

8,设置程序的启动参数

  • 先执行【set args 参数1],然后【r】
  • 直接执行【r 参数1】

9,修改变量的值

  • set var 变量=newValue

10,查看帮助

  • help 命令名字:比如查看set命令的具体用法,可以使用【help set】

11,每次单步执行都想观察变量的值,请使用【display】,不想看了,就用【undisplay】加Num的号码

  • display 变量的名字
  • undisplay Num(号码)
  • info display:可以查看display的Num(号码)

12,调试core文件,当出现:段错误(核心已转储)[Segmentation fault (core dumped)]时,可以使用【gdb 程序名 core文件名】后,就能直接看到在哪行出错,如果没有显示,可以输入【where】,也可以定位到哪行出错。

但是core文件默认是不被生成的,如何让它生成呢,

  • 首先确认当前状态:【ulimit -c】,如果结果为0,说明不能生成core文件
  • 那么就设置core文件的允许大小:【ulimit -c unlimited】,也就是core文件大小没有限制,这样设置的好处是当core文件特别大的时候也能够被生成。当然也可以指定具体的大小【ulimit -c 1024000】等。

之后就有了下面的问题:

程序第一次执行出了[Segmentation fault]错误后,就会在当前目录生成一个名字为【core】的文件,问题来了,如果又执行了一次,又出了[Segmentation fault]错误后,又会生成一个【core】,这次的【core】就会覆盖掉上次的【core】,所以就需要设置如何生成【core】的文件名,达到每次生成的【core】的名字都不相同,就不会覆盖掉上次的core文件了。

选项如下:

%p:insert pid into filename 添加pid

%u:insert current uid into filename 添加当前的uid

%g:insert current gid into filename 添加当前的gid

%s:insert signal that caused the coredump into the filename 添加导致产生core的信号

%t:insert UNIX time that the coredump occurred into filename 添加core文件生成时间的unix时间

%h:insert hostname where the coredump happened into filename 添加主机名字

%e:insert coredumping executable name into filename 添加程序名

修改办法:

  • 切换到root用户
  • sudo su
  • 编辑/proc/sys/kernel/core_pattern文件,只能用下面的方法
  • echo "core-%e-%t" > /proc/sys/kernel/core_pattern
  • 然后生成的core文件的名字就变为:【core-app-1555987945】,注意程序的名字为app。

相关推荐

Linux在线安装JDK1.8

首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...

Linux安装JDK,超详细

1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...

Linux安装jdk1.8(超级详细)

前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...

Linux系统安装JDK教程

下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...

干货|JDK下载安装与环境变量配置图文教程「超详细」

1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...

Linux下安装jdk1.8

一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...

Linux上安装JDK

以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...

Linux系统的一些常用目录以及介绍

根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...

Linux系统目录结构

一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...

Linux文件查找

在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...

嵌入式linux基本操作之查找文件

对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...

linux系统查看软件安装目录的方法

linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...

Linux下如何对目录中的文件进行统计

统计目录中的文件数量...

Linux常见文件目录管理命令

touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...

Linux常用查找文件方法总结

一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...

取消回复欢迎 发表评论: