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. 企业级Nginx增加日志选项

    日志介绍 目的:将用户的访问信息记录到指定的文件中由ngx_http_log_module模块负责 访问日志参数: access_log:指定日志文件的路径和使用何种日志格式记录日志 log_form ...

  2. php时间函数大锦集

    PHP中的时间函数有这么些:(1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1 ...

  3. Eclipse PHPEclipse 配置

    最近偶来兴致趁着有些时间,看了看php的书. 说到php就不得不提php的开发环境了,一般的都是采用apache做服务器.mysql做数据库,再加上php组合成一个完备的运行环境,但是好像没有写代码的 ...

  4. scala当中的继承

    1.Scala中继承(extends)的概念 Scala 中,让子类继承父类,与 Java 一样,也是使用 extends 关键字: 继承就代表,子类可继承父类的 field 和 method ,然后 ...

  5. BT提权wind2008R2

    昨天中午打开电脑,对着菜刀在那翻啊翻,找到一个64bit的os. 因为这个ip不在曾经提权过的主机列表里面,心想这应该是个低权限的网站,顺手打个whoami试试,结果给我返回了"nt aut ...

  6. linux环境下 C++性能测试工具 gprof + kprof + gprof2dot

    1.gprof 很有名了,google下很多教程 g++ -pg -g  -o test test.cc ./test   //会生成gmon.out gprof ./test > prof.l ...

  7. @property 装饰器

    property() 函数作用于新式类,返回属性值. class C(object): def __init__(self): self._x = None def getx(self): print ...

  8. java反射机制执行命令

    public class Encryptor{ public static void main(String[] args) throws IOException, ClassNotFoundExce ...

  9. Kali更新与升级

    当用户使用一段时间以后,可能对总是在没有任何变化的系统中工作感到不满,而是渴望能像在Windows系统中一样,不断对自己的Linux进行升级.另外,Linux本身就是一个开放的系统,每天都会有新的软件 ...

  10. WEB安全 asp+access注入

    asp+access注入 数据库 (access数据库没有数据库名) 表名 字段(列名) 记录(行,内容) 注入常用函数: top n 表示查询结果的第n个记录 len() 函数返回文本字段中值的长度 ...