gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序。

分析core文件的方法如下:

1、gdb 程序名 core文件名

2、bt或where命令查看堆栈信息。

3、进入某个栈:f N,f是frame的缩写,N是栈号,如0、1、2、3...

进入到某个栈后,才能通过p命令查看这个栈的临时变量,否则只能查看全局变量。

例如a.out程序core产生了core文件core-a.out-12345,gdb方法如下:

gdb a.out core-a.out-12345

bt(或者where)

f 3,进入第3帧

调试一个正在运行的程序使用gdb -p PID命令,PID即程序的pid。

需要注意的是,gdb调试正在运行的程序会导致程序挂起,因此请记住不要gdb调试正在运行的在线服务。

设置断点的方式有很多种,最常见的有两种:一是设置程序运行到源代码的某一行,二是设置程序运行到某个函数。

设置程序运行到某一行,通过“文件名:行号”的形式:

b test.cpp:100

设置程序运行到某个函数,通过“名字空间::函数名”的形式:

gdb namespace_a::func

查看断点:info b

删除断点:d N,d是delete的缩写,N是断点的编号,可以通过info b查看。

无论哪种方式设置断点,都要执行c命令(continue),让程序继续运行。

在调试程序时,最常用的gdb命令是:n、s、p

n即next,单步执行,执行下一步的意思,遇到函数会调用函数。

s即step,也是单步执行,但是会进入函数内部,然后结合n命令来调试函数。

p即print,打印变量,最常用的命令。p可以打印普通变量、std::string字符串、指针、数组等。

gdb打印字符串支持c_str()、length()等:

std::string str;

p str,p str.c_str()查看字符串内容,p str.length(),查看字符串长度

有时会遇到字符串太长不能显示全,最后显示"...",可以通过命令取消长度限制:

set print elements 0

这样就能打印完整的字符串。

小提示:

1、gdb会自动保存上一次执行的命令,可以通过键盘的上下方向箭头切换最近输入的命令。

2、直接敲回车,会执行上一次的命令,在n单步调试的时候最常用。

面试中的gdb问题往往会很挑剔,除了考察常用的gdb命令,还会问一些多线程相关的命令,

例如怎么查看线程信息?怎么打印所有线程的当前栈信息?

gdb查看线程信息:info thread,可以查看线程编号和正在执行的函数

进入某个线程:t N,N是线程编号,如1、2、3...

查看所有线程的栈信息:thread apply all bt

这是面试官在考察面试者有没有多线程问题排查经验。

最后说一下gdb中如何打印STL的vector和map,gdb默认不支持STL,

需要从网上下载一个txt文件,然后将其内容追加到.gdbinit文件中,就可以使用pvector命令查看vector容器数据。


金句分享

有很多好书对我的行为和信念产生了巨大影响。我尝试着每天花一些时间去读一本书或者听一本有声书,这些书会以某种方式改善我的生活。

出自《软技能 代码之外的生存指南》,“我的私房成功书单”章节。

解读:读书是对自己最好的投资,多读一些专业书、理财书、励志书。

工作和面试中的gdb的更多相关文章

  1. 面试中AOP这样说,面试官只有一个字:服!

  2. 面试中关于Java你所需知道的的一切

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  3. 前端js面试中的常见的算法问题

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

  4. 谈谈如何在面试中发掘程序猿的核心竞争力zz

    早两天看了知乎日报的这篇文章<什么是程序员的核心竞争力?>,caoz讲的几点是让我感同身受.这让我联想起了给程序猿的面试,其实也就是通过短暂的接触来发掘程序猿的核心竞争力.接下来我就谈谈我 ...

  5. java面试中的智力题

    智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇 ...

  6. 面试中关于Java中涉及到知识点(转)

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  7. 找工作笔试面试那些事儿(16)---linux相关知识点(1)

    linux这部分的知识倒不是笔试面试必考的内容,不过现在很多公司开发环境都在linux系统下,一些简单的知识还是需要了解一下的,笔试面试中万一碰到了,也不会措手不及.作为菜硕的我,又因为读研期间的项目 ...

  8. 找工作笔试面试那些事儿(8)---常问的CC++基础题

    这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...

  9. 2年Java开发工作经验面试总结

    最近换了个公司,从三月底开始面,面到四月底,面了有快二十家公司.我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些问题是自己之前没遇到过的,或者是哪 ...

随机推荐

  1. 购买 In-app Billing 商品

    购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...

  2. MapReduce Design Patterns(chapter 1)(一)

    Chapter 1.Design Patterns and MapReduce MapReduce 是一种运行于成百上千台机器上的处理数据的框架,目前被google,Hadoop等多家公司或社区广泛使 ...

  3. August 04th 2017 Week 31st Friday

    Love is a vine that grows into our hearts. 爱是长在我们心里的藤蔓. What is love? Maybe no one can explain it cl ...

  4. [BZOJ 1033][ZJOI2008]杀蚂蚁antbuster

    1033: [ZJOI2008]杀蚂蚁antbuster Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1200  Solved: 507[Submi ...

  5. 利用python查看电脑系统信息

    #查看python默认编码格式 >>> import sys >>> print sys.getdefaultencoding() #python 2.x 默认编码 ...

  6. 微软报表A4纸大小规则

    总页宽:21cm,总页高:29.7cm 上下左右边距均为2.5cm 页眉页脚均为0.75cm 正文内容宽:16cm,高23.2cm

  7. 四、C# 5.0 新特性——Async和Await使异步编程更简单

    一.引言 .NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就 ...

  8. 小白学CMD下运行MySQL

    将mysql目录下bin目录中的mysql.exe放到C:\WINDOWS下,可以执行以下命令 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) ...

  9. H3C笔试题目

    最近这段时间正在找工作,去H3C做了下笔试题,题目出的还不错,比一般公司水平高上一点点,偷偷弄了点回来,分享一下,我把答案和解析全部整理了出来,有需要的可以看看. 1.以下描述正确的有(AD) A.1 ...

  10. JavaScript 数组遍历方法的对比

    JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用在那些场景,下面将进行比较: 各种数组遍历的方法 for 语句 ,,,] , len ...