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. Linux(CentOS)网卡的基本设置

    临时设置 修改IP地址: ifconfig eth0 10.60.45.205 mask 255.255.255.0 修改网关地址 route add default gw 10.60.45.1 de ...

  2. BT提权wind2008R2

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

  3. vs中添加工具cmder并自动定位到当前目录

    有时在vs中为了使用git命令行,需要打开cmder工具,并让cmder自切换到当前目录: 方法1: 看下效果: 方法2:在文件夹中右键(添加到右键自行百度)

  4. [T-ARA][괜찮아요][没关系]

    歌词来源: 没关系:http://music.163.com/#/song?id=22704448 没关系(Remix Ver.):http://music.163.com/#/song?id=258 ...

  5. jq双日历--最终版(功能兼容IE5,样式兼容IE6)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. webkit架构

    简要的说,WebKit由三个模块组成:JavaScriptCore.WebCore 和 WebKit.WebKit作为了整个项目的名称. JavaScriptCore:是JavaScript解释器: ...

  7. 关于使用Filter降低Lucene tf idf打分计算的调研

    将query改成filter,lucene中有个QueryWrapperFilter性能比较差,所以基本上都须要自己写filter.包含TermFilter,ExactPhraseFilter,Con ...

  8. 【CSS】使用浮动来创建拥有页眉、页脚、左侧目录和主体内容的首页

    有两种创建水平导航栏的方法.使用行内或浮动列表项. 如果您希望链接拥有相同的尺寸,就必须使用浮动方法. 1.构建水平导航栏的方法之一是将 <li> 元素规定为行内元素: display:i ...

  9. linux下搭建LAMP

    PHP命令找不到:  export PATH=$PATH:/usr/local/php/bin https://www.centos.bz/forum/thread-69-1-1.html 步骤: w ...

  10. rocketmq命令【转】

    首先进入 RocketMQ 工程,进入/RocketMQ/bin   在该目录下有个 mqadmin 脚本 .  查看帮助:   在 mqadmin 下可以查看有哪些命令    a: 查看具体命令的使 ...