C++ Linux调试(无IDE)

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

参考链接

目录

1、GDB调试

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

命令样例

bash 复制代码
gcc -g -o Run_exe test.c

1.2 cmake编译输出可调试程序

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

bash 复制代码
# 设置为调试模式
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
break b 设置断点,b 3 表示在第3行设置断点,可以设置多个断点;也可以b functionName ,对函数下断点 info b 查看所有断点信息 delete 1 标识取消第一个断点,断点号通过info b可以查询得到
run r 开始运行程序,程序运行到断点位置会停下来,如果没有遇到断点,程序一直运行下去
next n 执行当前行语句,如果该语句为函数调用,不会进入函数内部执行
step s 执行当前语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。 注意了:如果函数是库函数或者第三方提供的函数,用s也是进不去的,因为没有源代码,如果是你自定义的函数,只要有源码就可以进去
print p 显示变量值,例如:p name 表示显示变量name的值。
list 输入该命令,回车,可以查看10行源代码,再不用输入命令,直接回车,还可以继续看十行源代码
continue c 继续程序的运行,直到遇到下一个断点
bt 查看程序执行到当前位置的调用栈
set var name=value 设置变量的值,假设程序有两个变量: int ii;调试的时候 set var ii=22 即,把ii的值设置为22 char name[50];调试的时候 set var name="测试" 把name的值设置为"测试",注意这里不是strcpy
quit q 退出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调试差不多了

相关推荐
磊灬泽1 小时前
【日常错误】鼠标无反应
linux·windows
利刃大大5 小时前
【高并发内存池】五、页缓存的设计
c++·缓存·项目·内存池
Miracle&6 小时前
2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
linux·网络·tcp/ip
C语言小火车6 小时前
【C++八股文】基础知识篇
c++·tcp/ip·const·智能指针·多线程同步·static关键字·c++内存模型
专注API从业者6 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
liulilittle6 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
眠りたいです6 小时前
基于脚手架微服务的视频点播系统-播放控制部分
c++·qt·ui·微服务·云原生·架构·播放器
Ribou6 小时前
Ubuntu 24.04.2安装k8s 1.33.4 配置cilium
linux·ubuntu·kubernetes
Want5957 小时前
C/C++圣诞树①
c语言·开发语言·c++
老赵的博客7 小时前
c++ 杂记
开发语言·c++