Gdb调试

1 概述
当程序运行时出现问题时,通过GDB调试可以快速找到问题点,当然不是所有问题都能通过调试找到问题点。

在GCC编译程序时,需要加 -g参数,可以通过在-g选项后附加数字1、2或3来指定在代码中加入调试信息的多少。默认的级别是2(-g2),此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。级别3(-g3)包含级别2中的所有调试信息,以及源代码中定义的宏。级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。

如下程序:

编译:gcc -g demo.c -o demo

运行程序时,当输入a的值为0时,报如下错:

启动GDB

终端输入命令:gdb demo

若有参数gdb --args demoparameter1 parameter2 parameter3),当GDB提示符出现的时候,表明GDB已经做好准备进行调试了,现在可以通过run命令让程序开始在GDB的监控下运行,如下图:

输入:run

run 和 start 指令都可以用来在 GDB 调试器中启动程序,它们之间的区别是:

① 默认情况下,run 指令会一直执行程序,直到执行结束。如果程序中手动设置有断点,则 run 指令会执行程序至第一个断点处;
②start 指令会执行程序至 main() 主函数的起始位置,即在 main() 函数的第一行语句处停止执行(该行代码尚未执行)。

如果进程已经运行,可以根据进程号启动:gdb –p pid

3 断点
断点命令:break,也可以简写为b

某一行进行打断点(第3行):b 3;
多个文件,对某个文件的某一行打断点:b demo.c:4,表示对demo.c文件4行打断点;
对函数打断点:b fun ,表示对fun()函数打断点
多个文件,对某个函数打断点:b demo.c:fun ;
查询断点:

查询所有断点:info b
查询第n个断点:info b n
条件断点:b demo.c:8 if Value = 10

删除断点:delete,简写d

删除所有的断点:delete break
删除某个断点 n为断点号:delete break n
删除设在n行的断点(多个文件与打断点一样):clear n
en/enable启用某个断点
dis/disable 禁用某个断点

4 .打印 

打印断点处某变量值,用命令 p;

  • 16进制:p/x
  • 二进制:p/t

5. 单独调试 

单步调试:next ,简写为n,一条一条简单语句执行。

单步调试:step,简写s,若在某个函数断点处,则进入此函数。

退出当前断点进入下一个断点,或继续运行。

命令:continue ,简写c

finish 退出进入的函数 ,并且打印函数返回时的堆栈地址和返回值及参数值等信息,回到上一层调用函数

until 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为u

until + 行号    运行至某行
call + 行数 + (参数)    
调用程序中可见的函数,并传递参数

如:call gdb_test(66)

6. 显示源码

 查看源码:list(l),默认显示10行

  • l 函数名
  • l 数组

7 .设置/查看变量值(set/show) 

修改变量值:set 变量名=value

查看变量值:show 变量名

8. 查看堆栈信息

 当程序崩溃可以使用,where命令,查看死在那个位置。

bt,查看函数栈 

f/frame 切换到当前调用线程的指定堆栈

f 2   进入第2栈

9 .查看线程

i threads   【查看所有线程】

t num        【进入num线程】

thread       【查当前线程】

thread 2    【切换到第二个线程】

PS:注意总结记录。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040

线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…

Decomposed Meta-Learning for Few-Shot Named Entity Recognition

原文链接: https://aclanthology.org/2022.findings-acl.124.pdf ACL 2022 介绍 问题 目前基于span的跨度量学习(metric learning)的方法存在一些问题: 1)由于是通过枚举来生成span,因此在解码的时候需要额…

GPT的前世今生:从gpt1到chatgpt的能力提升

从2017年google brain提出transformer模型,到2018年基于transformer模型open ai推出了gpt1模型以及google推出了bert模型,到2019-2021年open ai陆续推出gpt2和gpt3,再到2022-2023年推出chat-gpt和gpt4,大语言模型已经发展成了一个…

Hadoop+Hive+Spark+Hbase开发环境练习

1.练习一 1.数据准备 在hdfs上创建文件夹,上传csv文件 [rootkb129 ~]# hdfs dfs -mkdir -p /app/data/exam 查看csv文件行数 [rootkb129 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l 2.分别使用 RDD和 Spark SQL 完成以下分析&#xf…

Auth.js:多合一身份验证解决方案 | 开源日报 No.60

nodejs/node Stars: 96.2k License: NOASSERTION Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。它具有以下关键特性和核心优势: 强大:Node.js 提供了强大且高效的服务器端运行能力,可以处理并发请求,并支持异步编程…

【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题)— 上

深入探索Java特性中并发编程体系的原理和实战开发指南( 实现可伸缩IO专题) 总体内容概览可扩展的网络服务分布式对象传统的阻塞式网络服务每个请求或连接可以在独立的线程中进行处理Server服务处理请求类Handler处理逻辑类优点缺点 可扩展性目标平稳降级…

【Gan教程 】 什么是变分自动编码器VAE?

名词解释:Variational Autoencoder(VAE) 一、说明 为什么深度学习研究人员和概率机器学习人员在讨论变分自动编码器时会感到困惑?什么是变分自动编码器?为什么围绕这个术语存在不合理的混淆?本文从两个角度…

设置爱奇艺代理教程

设置爱奇艺代理教程 活泼与直观:设置爱奇艺代理,让你的网络更加自由! 轻松口语化:首先,打开爱奇艺APP,进入设置页面。 设置->网络->代理设置 活泼与直观:在代理设置页面,我…

Docker Swarm 集群搭建

Docker Swarm Mode Docker Swarm 集群搭建 Docker Swarm 节点维护 Docker Service 创建 1.准备主机 搭建一个 docker swarm 集群,包含 5 个 swarm 节点。这 5 个 swarm 节点的 IP 与暂 时的角色分配如下(注意,搭建完成后会切换角色&#xff…

无线测温产品在菲律宾某工厂配电项目的应用

摘要:配电系统是由多种配电设备和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。由于配电系统作为电力系统的一个环节直接面向终端用户,它的完善与否直接关系着广大用户的用电可靠性和用电质量,因而在电力系统中具有…

3.SpringSecurity基于数据库的认证与授权

文章目录 SpringSecurity基于数据库的认证与授权一、自定义用户信息UserDetails1.1 新建用户信息类UserDetails1.2 UserDetailsService 二、基于数据库的认证2.1 连接数据库2.2 获取用户信息2.2.1 获取用户实体类2.2.2 Mapper2.2.3 Service 2.3 认证2.3.1 实现UserDetails接口2…

asp.net乡村旅游管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net乡村旅游管理系统是一套完善的web设计管理系统系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c# 语言开发 asp.net乡村旅游管理系统 二、…

2022年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于Python语言的注释,以下选项中描述错误的是?( ) A: Python语言有两种注释方式:单行注释和多行注释 B: Python语言的单行注释以#开头 C: Python多行注释使用###来做为标记 D: …

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…

Jenkins环境部署与任务构建

一、CI/CD 1、CI/CD 概念: CI/CD 是一种软件开发和交付方法,旨在加速应用程序的开发、测试和部署过程,以提高软件交付的质量和效率。 (1) 持续集成 (CI Continuous Integration): 持续集成是开发团队频繁集成其代码更改的过程。开发者将其…

DBOW概要理解与记录

前言 DBOW作为一种视觉回环技术被广泛应用在各类VSLAM框架中,之前的经验主要集中在使用和抽象理解层面,近期花了一些时间仔细阅读了相关论文和源码,这里做一些记录。 两个关键概念 Vocabulary 通过预先训练得到的词汇库,以树状…

VR全景餐厅,为餐饮老板开启了新纪元

在近两年的“元宇宙”概念的催生下,VR全景技术逐渐渗透到我们生活的方方面面,从舌尖到指尖、从田间到车间、从衣食住行到娱乐消费等,越来越多的行业、领域开始引入VR全景了,并在各自的垂直领域开拓了VR全景新时代。 而一直以来&am…

强化学习问题(7)--- Python和Pytorch,Tensorflow的版本对应

1.问题 之前下载的python3.8,在对应Pytorch和Tensorflow时没太在意版本,在运行一些代码时,提示Pytorch和Tensorflow版本过高,直接降下来,有时候又和Python3.8不兼容,所以又在虚拟环境搞一个Pyhon3.7&#x…

超简洁ubuntu linux 安装 cp2k

文章目录 打开下载网址解压接下来的步骤讲解 将解压的包移到对应路径下最后运行 打开下载网址 需要从github下载:下载网址 两个都可以从windows下先下载,再复制到linux中, 如果不能复制,右键这两个,复制链接&#xf…

项目总结-新增商品-Pagehelper插件分页查询

(1)新增商品 工具类: /** * Title: FileUtils.java * Package com.qfedu.common.utils * Description: TODO(用一句话描述该文件做什么) * author Feri * date 2018年5月29日 * version V1.0 */ package com.gdsdxy.common.u…