C++ Linux调试(无IDE)

跨平台IDE编译调试C++很方便,如QTCreate 、VSCode、Eclipse等,但是如果只能使用Shell控制台呢,gdb调试的优势就很明显了,在没有IDE的情况下,这个方式最有效。因为上手不是很难,特此整理

参考链接

目录

    • 1、GDB调试
      • 1.1、gcc 编译输出可调试程序
      • 1.2 cmake编译输出可调试程序
      • 1.3gdb常用指令
      • 1.4gdb操作步骤
    • 2、core调试
    • 3、调试正在运行的程序

1、GDB调试

1.1、gcc 编译输出可调试程序

命令样例

gcc -g -o Run_exe test.c

1.2 cmake编译输出可调试程序

在CMakeList.txt中增加如下字段即可

# 设置为调试模式
set(CMAKE_BUILD_TYPE "Debug")
# 配置调试信息
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")

1.3gdb常用指令

gdb调试主要记住这个表,再就是开始实战操作

命令命令缩写命令说明
set args设置主程序的外部参数
例如:./Run_exe argc1 argc2
breakb设置断点,b 3 表示在第3行设置断点,可以设置多个断点;也可以b functionName ,对函数下断点
info b 查看所有断点信息
delete 1 标识取消第一个断点,断点号通过info b可以查询得到
runr开始运行程序,程序运行到断点位置会停下来,如果没有遇到断点,程序一直运行下去
nextn执行当前行语句,如果该语句为函数调用,不会进入函数内部执行
steps执行当前语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。
注意了:如果函数是库函数或者第三方提供的函数,用s也是进不去的,因为没有源代码,如果是你自定义的函数,只要有源码就可以进去
printp显示变量值,例如:p name 表示显示变量name的值。
list输入该命令,回车,可以查看10行源代码,再不用输入命令,直接回车,还可以继续看十行源代码
continuec继续程序的运行,直到遇到下一个断点
bt查看程序执行到当前位置的调用栈
set var name=value设置变量的值,假设程序有两个变量:
int ii;调试的时候 set var ii=22 即,把ii的值设置为22
char name[50];调试的时候 set var name=“测试” 把name的值设置为“测试”,注意这里不是strcpy
quitq退出gdb环境

1.4gdb操作步骤

这里假设已经编译出可调式的程序
1、gdb 调试JoinTieGCP_EXE
在这里插入图片描述
2、在该程序511设置断点(如上图)
3、设置外部传参命令
在这里插入图片描述
4、r运行程序,n下一步(不进入),s下一步(进入),list查看源代码,info b 查看断点等等

2、core调试

core调试主要查看程序异常在哪一行运行挂掉,中文输出“段错误”,英文输出“core dump”

表现如下(对于其他错误应该不支持该方法)
在这里插入图片描述

接下来操作步骤:

1、ulimit -a 查看系统参数;
在这里插入图片描述

2、ulimit -c unlimit 把core文件的大小设置为无限制;
在这里插入图片描述

3、运行程序,生成core文件;
在这里插入图片描述

4、gdb 程序名 core文件名
在这里插入图片描述

5、输入命令“bt”,查看函数调用栈
在这里插入图片描述

3、调试正在运行的程序

1、程序执行中
测试程序中写一个for循环100次,每次循环等待1秒的测试程序。

2、查找进程ID,进入进程调试
查找进程ID
ps -ef|grep book1

gdb调试
gdb book1 -p 21495
在这里插入图片描述
剩下的就跟gdb调试差不多了

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

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

相关文章

光伏项目开发合作模式

光伏项目开发合作模式多种多样,根据应用场景的不同,主要分为户用光伏项目合作模式和工商业光伏项目合作模式。本文将分别介绍这两种模式的特点和常见形式,帮助大家更好地了解光伏项目开发的市场运作。 一、户用光伏项目合作模式 1.用户全款购…

笔记本电脑内存不够

笔记本电脑内存不够是众多笔记本用户面临的常见问题,尤其是对于一些需要处理大型文件或者运行复杂软件的用户,这个问题可能会严重影响笔记本的使用体验。那么,我们应该如何解决笔记本电脑内存不够的问题呢?本文将从几个方面进行详…

基于B/S架构+java语言+ 开发工具Idea,vscode医院产科信息管理系统源码 如何标准化对接技术及各个模块

基于B/S架构java语言 开发工具Idea,vscode医院产科信息管理系统源码 如何标准化对接技术及各个模块 医院产科信息管理系统:标准化对接是一个涉及多个方面的复杂过程,旨在通过数字化手段提升产科管理的效率与质量,实现孕产妇全周期的健康管理…

字节码编程javassist之增加异常捕获

写在前面 本文看下如何增加try catch异常捕获。 1:程序 需要增强的类: public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插桩类 package com.dahuyou.javassist.huohuo.aa;import …

【数据结构】单链表:数据结构中的舞者,穿梭于理论与实践的舞池

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 数据结构与算法 先赞后看,已成习惯 创作不易,多多支持! 一、链表的概念和结构 1.1 链表的概念 在上一篇文章中,我们了解了线性表(linear list),并且学习了其…

Spring——IOC创建对象方式

可参考官网:https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.htmlhttps://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html 1. 使用无参构造创建对象&#xff0…

数据库性能优化系统设计

设计一个数据库性能优化系统,目标是监测、诊断并改善数据库的运行效率,确保系统能够高效稳定地处理大量数据请求。以下是一个概要设计,包括关键模块、功能和实现思路: 1. 系统架构 分布式监控中心:采用分布式架构收集…

PHP宝藏神器多功能投票系统源码小程序

🎉发现宝藏神器!一键解锁“多功能投票小程序”的无限可能✨ 🌈 开篇安利:告别繁琐,拥抱高效! Hey小伙伴们,是不是经常为组织活动、收集意见而头疼不已?🤯 今天就要给大…

Node 中基于 Koa 框架的 Web 服务搭建实战

前言 在《Node之Web服务 - 掘金 (juejin.cn)》一文中,我们使用 HTTP 模块构建了后端接口,从而实现了后端服务的开发。可以对此进行进一步优化 http模块代码回顾 const http require("http");const server http.createServer((req, res) > {if (reqUrl.pathna…

Python前沿技术:机器学习与人工智能

Python前沿技术:机器学习与人工智能 一、引言 随着科技的飞速发展,机器学习和人工智能(AI)已经成为了计算机科学领域的热门话题。Python作为一门易学易用且功能强大的编程语言,已经成为了这两个领域的首选语言之一。本…

【零基础】学JS

喝下这碗鸡汤 “知识就是力量。” - 弗朗西斯培根 1.三元运算符 目标:能利用三元运算符执行满足条件的语句 使用场景:其实是比if双分支更简单的写法,可以使用三元表达式 语法:条件 ? 满足条件的执行代码 : 不满足条件执行的代码 接下来用一个小案例来展…

C#实现求解函数导数和值

using MathNet.Symbolics; using System; using System.IO; using System.Text;private string ConvertToLatex(string mathExpression) {return mathExpression.Replace(" * ", "").Replace("*", ""); }// 将函数定义为字符串 string…

AI语言处理的双刃剑:Tokens令牌化技术解析

生成式人工智能模型,如GPT-4o,采用基于Transformer架构的复杂处理方式,这与人类处理文本的方式存在明显差异。这些模型依赖于一种称为“令牌化”的过程,将文本分解为更小的片段,称为“令牌”,以便更有效地处…

Kafka抛弃Zookeeper后如何启动?

Kafaka如何下载 官网地址 目前Kafka最新的版本就是3.7.1 我们可以看到下面这两个版本信息?什么意思呢? Scala 2.12 - kafka_2.12-3.7.1.tgz (asc, sha512)Scala 2.13 - kafka_2.13-3.7.1.tgz (asc, sha512) 我们应该知道,一个完整的Kafka实…

平安消保在行动 | 守护每一个舒心笑容 不负每一场双向奔赴

“要时刻记得以消费者为中心,把他们当做自己的朋友,站在他们的角度去思考才能更好地解决问题。” 谈及如何成为一名合格的消费者权益维护工作人员,平安养老险深圳分公司负责咨诉工作的庞宏霄认为,除了要具备扎实的专业技能和沟通…

MySQL篇四:表的约束

文章目录 前言1. 空属性2. 默认值3. 列描述4. zerofill5. 主键6. 自增长7. 唯一键8. 外键 前言 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。…

软件架构之开发方法

软件架构之开发方法 第6章:开发方法6.1 软件生命周期6.2 软件开发模型6.2.1 瀑布模型6.2.2 演化模型6.2.3 螺旋模型6.2.4 增量模型6.2.5 构件组装模型 6.3 统一过程6.4 敏捷方法6.4.1 极限编程6.4.2 特征驱动开发6.4.3 Scrum6.4.4 水晶方法6.4.5 其他敏捷方法 6.5 软…

【嵌入式Linux】<知识点> 虚拟地址空间

前言 在Linux中,新创建的进程都拥有独立的虚拟地址空间。为深入多进程多线程的理解,了解虚拟地址空间分区十分有必要。 一、概念 虚拟地址空间分为4G空间,其中1G为内核区,3G为用户区。虚拟地址空间的地址从0开始,且该…

66.Python-web框架-Django-免费模板django-datta-able的分页的一种方式

目录 1.方案介绍 1.1实现效果 1.2django.core.paginator Paginator 类: Page 类: EmptyPage 和 PageNotAnInteger 异常: 1.3 templatetags 2.方案步骤 2.1创建一个common app 2.2创建plugins/_pagination.html 2.3 其他app的views.py查询方法 2.4在AIRecords.html里…

入门 Vue Router

Vue Router Vue Router插件做了什么&#xff1f; 全局注册 RouterView 和 RouterLink 组件。添加全局 $router 和 $route 属性。启用 useRouter() 和 useRoute() 组合式函数。触发路由器解析初始路由。 标签介绍 RouterView 加载指定页面 <RouterLink to"/home"…