C++ Linux调试(无IDE)

news2025/2/26 23:21:22

跨平台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.coloradmin.cn/o/1889172.html

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

相关文章

边缘网关在实际应用中的价值与挑战-天拓四方

随着物联网、大数据和人工智能等技术的快速发展,边缘计算逐渐崭露头角,成为推动数字化转型的关键力量。而边缘网关,作为边缘计算的核心组成部分,其重要性不言而喻。本文将以某智能制造企业为例,结合数据分析&#xff0…

MySQL高级-MVCC- readview介绍

文章目录 1、介绍2、ReadView中包含了四个核心字段:3、版本链数据的访问规则:4、不同的隔离级别,生成ReadView的时机不同: 1、介绍 ReadView(读视图)是 快照读 SQL执行时MVCC提取数据的依据,记录…

微信小程序订单发货管理接入

订单发货管理接入指引:https://mp.weixin.qq.com/cgi-bin/announce?token1148555877&actiongetannouncement&key11671435333v04b2&version1&langzh_CN&platform2https://mp.weixin.qq.com/cgi-bin/announce?token1148555877&actiongetann…

Redis基础教程(十):HyperLogLog

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

掌握IP代理API提取技巧,让你的网络操作更高效!

IP代理在现代网络中扮演着越来越重要的角色。今天,我们将深入探讨IP代理的API提取知识,帮助大家更好地理解和应用这一技术。 IP代理API是什么? IP代理API是提供IP代理服务的接口,允许开发者通过编程方式自动获取和管理代理IP。通…

土壤养分检测仪——助力农田监测

在现代化的农业生产中,精准施肥、科学种植已成为提升作物产量与品质的关键。为了实现这一目标,土壤养分检测仪成为了农田科技的得力助手。这款仪器不仅配备了成品药剂和检测器材,还能在现场进行快速测定,广泛应用于农田土壤养分的…

干式电抗器的工作原理是什么

干式电抗器是电力系统中常用的无功补偿设备,主要用于调节电网的电压、提高功率因数、限制短路电流等。它的工作原理主要是通过在电路中引入一个与负载电流相反的磁场,从而产生一个与负载电流相抵消的电抗力,达到调节电压和功率因数的目的。 干…

昇思25天学习打卡营第12天|linchenfengxue

DCGAN生成漫画头像 通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。 GAN基础原理 生成式对抗网络(Generative Adversarial Networks,GAN)是一种生成式机器学习模型,是近年来复杂分布上无监督学习最具前景的…

全面详解菲律宾slots游戏本土网盟广告CPI流量效果分析

全面详解菲律宾slots游戏本土网盟广告CPI流量效果分析 一、引言 随着互联网的普及和移动设备的广泛应用,网络游戏行业迅速崛起,成为全球娱乐市场的一大热门。菲律宾作为东南亚地区的重要国家,其网络游戏市场也呈现出蓬勃的发展势头。在这样的…

免费分享:2022年全国地铁站点数据(附下载方法)

数据简介 2022年全国地铁站点数据不仅反应我国城市交通网络的日益完善,也为城市规划、公共交通优化、商业布局、应急响应及智慧城市建设提供了宝贵的数据支持与参考,助力城市发展与居民生活质量的全面提升。 数据属性 数据名称:全国地铁站点…

iPhone苹果手机怎么取消腾讯视频VIP会员自动续费?

腾讯视频会员分为VIP(同时在线设备5台、同时播放设备2台;)和SVIP(同时在线设备8台、同时播放设备3台;),在iPhone苹果手机上开通腾讯视频连续包月、包季、包年后,需要手动取消才能关闭…

全网最全最细的jmeter接口测试教程,建议收藏

在日常工作中,尤其是做接口测试时,我们最经常用到的两个工具,就是Jmeter和postman。今天,我们主要是讲一讲Jmeter在接口测试这一块的一些方式方法。内容比较多,大家可以收藏一下,以后慢慢学。 1&#xff0…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

AJAX的概述 ,同步和异步的区别 ,AJAX 的交互模型和传统交互模型的区别

一. AJAX的概述 1.1 什么是ajax 同步: 异步: 1.AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 ​ 说明:异步:就是不同步。例如我们向后台发送请求,同步的方式是后台必…

南京·2024江苏眼睛健康产业展览会观众邀请·徐州站

6月29日,南京2024全国眼睛健康产业博览会暨眼科医学大会,组委会一行六人来到国家级历史文化名城-徐州,开启了南京全国眼博会江苏省十三个城市线下观众邀请的徐州站工作。徐州,作为华东重要门户城市,华东地区重要的科教…

牛客小白月赛97

A.三角形 判断等边三角形&#xff0c;题不难&#xff0c;代码如下&#xff1a; #include <iostream>using namespace std;int a[110];int main() {int n;cin >> n;int x;int mx 0;for(int i 1; i < n; i){cin >> x;mx max(mx, x);a[x];}for(int i 1…

layui-页面布局

1.布局容器 分为固定和完整宽度 class layui-container 是固定宽度 layui-fluid是完整宽度

【Python】Python的安装与环境搭建

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言Python下载环境配置测试环境变量是否配置成功配置环境变量 运行Python交互式解释器&#xff1a;命令行脚本集成开发环境&#xff08;IDE&#xff1a;Integrated Development E…

【Python机器学习】模型评估与改进——回归指标

对于回归问题&#xff0c;可以像分类问题一样进行详细评估&#xff0c;例如&#xff0c;对目标值估计过高与目标值估计过低进行对比分析。 但是&#xff0c;对于我们见过的大多数应用来说&#xff0c;使用默认就足够了&#xff0c;它由所有回归器的score方法给出。业务决策有时…

四个Python代码片段,全面掌握下划线 “_”的妙用!

在Python的世界里&#xff0c;下划线“_”不仅是一个简单的符号&#xff0c;它还承载了许多编程的小技巧&#xff0c;可以让你的编码工作变得更加轻松和高效。 1、快速回顾&#xff1a;下划线在控制台的神秘力量 当你在Python控制台进行连续计算时&#xff0c;知道如何快速引…