GDB使用1:添加一个程序并且运行

本文目的

简单的介绍一下GDB是什么,有什么用,怎么用

前置知识点

  1. linux基本知识
  2. C++基本语法基础
  3. cmake基础(因为这里编译用的是cmake,懒得用make或者gcc了)

GDB工具简介

相关内容参考GDB User Manual

像gdb这样的调试器的目的是让您能够看到另一个程序在执行时“内部”发生了什么,或者另一个软件在崩溃时正在做什么。

本质上是在根据代码在编译的时候加入调试信息,可以让GDB这个进程介入到其他进程并且获取到调试信息。
前提是编译的时候加入了调试信息,也就是debug模式的编译。

debug模式和release模式的区别

  • Debug:调试版本:包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。
  • Release:发布版本:不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。
  • 只有debug模式下才可以使用gdb进行进程的调试

GDB添加一个文件并且进行debug

1. 编写一个程序

这个代码是有问题的,这才值得GBD去调试

//NULL.c
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char *argv[])
{
	int * ptr = NULL;
	*ptr = 1;
	return 0;
}

2. 编译该程序

编译的方式有很多中,gcc,cmake,make都可以。
需要在debug模式下编译
cmake需要debug的时候加入了这样一句话

set(CMAKE_BUILD_TYPE "Debug")

3. 直接运行该程序

会报Segmentation fault

./NULL
Segmenttion fault  (core has been dumped)

4. 使用GBD进行调试并且查看调试结果

NULL.c这个文件被我们编译成了名字叫做NULL的目标文件

gdb NULL
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Reading symbols from NULL...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/monchell/Mon_workspace/project/draft/build/bin/NULL 

Program received signal SIGSEGV, Segmentation fault.
0x00005555555546f7 in main ()

会告诉你在mian函数出现了segementation fault 的问题

查看头文件里面的priority_queue定义是这样的,使用了模板(会自动识别元素内容)

template<typename _Tp, typename _Sequence = vector<_Tp>,
	   typename _Compare  = less<typename _Sequence::value_type> >
    class priority_queue

参考文献

GDB User Manual

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值