文档章节

linux下如何用GDB调试c++程序

SVD
 SVD
发布于 2016/05/07 18:50
字数 618
阅读 109
收藏 10

       GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能:

  1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

  2. 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

  3. 当程序被停住时,可以检查此时你的程序中所发生的事。

  4. 动态的改变你程序的执行环境。

        从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。

 

gdb基本命令列表:   

                                                     

 

实例:

1 新建一个源文件vi swap.cc

源文件内容如下:

#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
        int tmp;
        tmp=a;
        a=b;
        b=tmp;
}

int main()
{
        int i,j;
        cout<<endl<<"Input two int number:"<<endl;
        cin>>i>>j;
        cout<<"Before swap(),i="<<i<<" j="<<j<<endl;
        swap(i,j);
        cout<<"After swap(),i="<<i<<" j="<<j<<endl<<endl;
        return 0;
}

直接复制粘贴生成源文件

 2.生成可执行文件 g++ -g -o swap swap.cc,注意必须使用-g参数,编译会加入调试信息,否则无法调试执行文件

3.启动调试 gdb swap

       3.1  查看源文件 list 1,回车重复上一次指令

             3.2设置调试断点 break 16,在第16行设置断点,info break查看断点信息(亦可使用缩写i b )

         3.3 调试  运行 输入run 或者

         3.3 单步调试,step 或者 s进入函数内部

                3.4查看变量 print b 或者 p b

                3.5查看函数堆栈bt,退出函数finish

                   3.6  继续运行直到下一个断点或主函数结束continue或者c

                  3.7 退出调试 输入q

 


本文转载自:http://blog.csdn.net/wfdtxz/article/details/7368357

共有 人打赏支持
SVD

SVD

粉丝 33
博文 201
码字总数 97489
作品 0
海淀
私信 提问
Linux 程序员的自我修养:玩转 GDB 调试

我从学生时代到进入软件开发这个行业,不知不觉已经十余年了。这些年,先后在网游公司做过游戏服务器,为上海某交易所做过金融交易系统、在金融证券公司做过股票证券交易系统和即时通讯软件、...

GitChat的博客
2018/12/24
0
0
Deepin Linux 下用 vscode 调试 C/C++ 程序

Deepin Linux 下用 vscode 调试 C/C++ 程序 现在网上的大部分类似博客都是错的、有问题的、麻烦的; 而你如果有幸读到我的这篇文章,那么恭喜你,我的是正确的,没问题的,简单的。 Deepin L...

仰望星空的先生
2018/04/02
0
0
NetBeans远程调试Linux c++ 11项目

NetBeans远程调试Linux c++ 11项目 由于好多原因,好久没有写博客了,随着c++ 11的普及率越来越高,开发c++ 项目的人也越来越多,可以说c++ 11 给了c++ 这门语言第二次生命,而且据笔者了解,...

SolidMango
2018/08/15
0
0
使用GDB调试RB-tree的几个问题

本博客 http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content 0. 引子 1. 第1个例子 (1) at提示前半部分代表什么? (2...

晨曦之光
2012/03/09
2.2K
0
在Ubuntu14下构建Hotspot并使用Eclipse调试

偶尔会看一点点JVM代码,所以尝试构建了一把最新的OpenJDK8 1.环境介绍 1)时间: 2015-05-13 2)系统: Linux haogrgr-vm 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2...

德胜
2015/05/14
0
2

没有更多内容

加载失败,请刷新页面

加载更多

百度黄埔学院将培养一批首席AI架构师,为“国之重器”赋能

深度学习高端人才不仅是AI发展的重要养分,也是企业转型AI巨大推动力。2019年1月19日,百度黄埔学院——深度学习架构师培养计划在百度科技园举行开学典礼,深度学习技术及应用国家工程实验室...

深度学习之桨
18分钟前
0
0
扒站wget仿站

wget -c -r -p -np -k http://xxx.com/xxx 其中: -c, --continue (断点续传) 接着下载没下载完的文件 -r, --recursive(递归) specify recursive download.(指定递归下载) -p, --page...

临江仙卜算子
20分钟前
0
0
Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
今天
0
0
如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
今天
3
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部