Lishengxie logo Lishengxie

Always on the way

  • 文章
  • 关于我
  • 归档
  • 联系
  1. 首页
  2. 文章
  3. Gdb调试学习

Gdb调试学习

2023-04-30 C++ , linux Lishengxie

前言

使用linux进行systemc的开发时经常出现core dump的文件,对于较大的项目vscode无法很快地进行debug,clion对makefile的支持不是很好,此时想到使用gdb进行调试并学习了一些基本的操作。以下的内容主要参考这篇博客和gdb debug的参考文档。

参考资料:

  1. https://www.yanbinghu.com/2019/04/20/41283.html
  2. Debugging with GDB

启动调试

GDB需要一个带有调试信息的可执行文件进行调试,因此编译过程中出现的错误无法使用GDB进行排除。通常对于C或者C++程序来说,在编译时加上-g参数可以保留调试信息,否则不能使用GDB进行调试。使用cmake时,可以在CMakeLists.txt文件中添加以下指令以支持GDB调试。

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

如果程序不是自己编译的,那么如何判断文件中是否带有调试信息呢,这篇博客中给出了几种调试的方法。

  1. 使用gdb
$ gdb main
Reading symbols from main...

如果提示no debugging symbols found, 那么不可以使用gdb调试该可执行文件。 2. readelf

# main是可执行文件名称
$ readelf -S main | grep debug
  1. file查看strip状况
$ file main

如果输出内容为xxx stripped, 那么说明该文件的调试信息已经被去除,不能使用gdb调试。但是not stripped的情况不能说明该文件可以被调试。

启动调试

无参数程序

$ gdb main
(gdb) run

输入run命令即可运行程序。

有参数程序

$ gdb main
# world对应参数
(gdb) run world
# 使用set args
(gdb) set args world
(gdb) run

结束调试

使用quit指令。

调试core文件

本文最开始提到进行C++开发时经常遇到core dump的问题,这种情况下需要定位到具体的core dump的位置,目前了解到两种方法,一种是使用backward-cpp插件,在linux系统上可以打印出详细的报错信息,具体可以参考博客https://zhuanlan.zhihu.com/p/397148839;另一种就是利用gdb进行调试。

当程序core dump时会产生core文件,可以很大程度上帮助我们定位问题,但是前提是系统没有限制core文件的产生,使用ulimit -c查看

$ ulimit -c
0

如果结果是0,那么core dump后也不会有core文件留下,此时需要进行额外的设置

ulimit -c unlimied  #表示不限制core文件大小
ulimit -c 10        #设置最大大小,单位为块,一块默认为512字节

调试core文件使用如下命令

gdb 程序文件名 core文件名

断点设置 & 变量查看

关于断点设置和变量查看的相关内容可以查看这篇博客https://www.yanbinghu.com/2019/04/20/41283.html,后续有时间的话会对相关内容加以整理。

目前调试主要还是借助IDE,对于一些core dump或者没有IDE的情况,gdb的调试将不可或缺,因此这里简单学习后加以记录。

C++ GDB调试

本文目录

  • 前言
  • 启动调试
  • 启动调试
    • 无参数程序
    • 有参数程序
  • 结束调试
  • 调试core文件
  • 断点设置 & 变量查看

精选文章

  • 分布式ID生成方案全解析:从数据库到雪花算法
  • Redis ziplist、quicklist 和 listpack
  • 多目标优化问题及两种常用解法

按主题探索

  • Redis 数据结构
    从存储布局理解实现
  • Linux 与部署
    服务器、证书与建站实践
  • 算法与深度学习
    解题方法、优化与公式推导
  • SNN / NoC 论文
    互连网络与映射算法

名言警句

学而时习之,不亦说乎?《论语·学而》学而不思则罔,思而不学则殆。《论语·为政》知之为知之,不知为不知,是知也。《论语·为政》三人行,必有我师焉。《论语·述而》工欲善其事,必先利其器。《论语·卫灵公》不积跬步,无以至千里。《荀子·劝学》千里之行,始于足下。《老子·第六十四章》纸上得来终觉浅,绝知此事要躬行。陆游《冬夜读书示子聿》
学而时习之,不亦说乎?
《论语·学而》 一言
← Makefile使用学习 启发式优化算法学习-PSO →

相关文章

  • Makefile使用学习 Apr 30, 2023
  • LJson Aug 16, 2023
  • Cmake 常用指令学习 Apr 30, 2023
  • Transfer Server Dec 23, 2023
皖ICP备2023003716号-1 | 公安备案皖公网安备34012202341113 | 违法和不良信息举报邮箱:1141751053@qq.com
Powered by Hugo & Explore Theme & Theme by SimonAKing.