29/70 GDB使用小结


layout: "post"
title: "29/70 GDB使用小结"
date: "2017-03-28 21:52"


最近研究了下 GDB,这是一款调试工具中的神器,其实很久以前就有涉及过这款软件,但是由于交互不直观,太多的命令,操作较为复杂等原因,因此我一直以来都很少使用这个工具,实在没办法的时候往往也都是采用插入输出来排查错误。

百度百科的介绍如下:UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

前期操作

  • 使用命令:gcc -g -o test test.c 生成可运行程序,注意:在编译时要加上-g选项,生成的可执行文件才能用gdb进行源码级调试。
  • 使用 gdb test 正式进入调试过程。

基本命令

进入调试过程后,才能够开始用 gdb 这个工具对程序的运行状态进行控制和观察。具体操作步骤如下:

  • run(或r): 从头开始连续运行程序,和不适用 GDB 直接执行程序效果一致。
  • start : 开始执行程序,停在main函数第一行语句前面等待命令。
  • backtrace(或bt): 查看各级函数调用及参数。
  • frame(或f): 帧编号 选择栈帧。
  • finish 连续运行到当前函数返回为止,然后停下来等待命令。
  • list(或l): 列出源代码,接着上次的位置往下列,每次列10行;list+行号 : 列出从第几行开始的源代码;list+函数名 列出某个函数的源代码。
  • next(或n): 执行下一行语句,和 step 的区别在于,不进入子函数。
  • step(或s): 执行下一行语句,如果有函数调用则进入到函数中。
  • break(或b): 行号 在某一行设置断点;break 函数名 在某个函数开头设置断点;break x if y 设置条件断点,注意 break 加入条件语句往往比较常用,能够更加准确的调到循环语句的第 n 步。
  • delete breakpoints : 断点号 删除断点。
  • disable breakpoints 断点号 禁用断点。
  • continue(或c): 从当前位置开始连续运行程序,被 break 后一般可以使用该语句。
  • set var : 修改变量的值,可以在任何地方使用改制重新修改某一个变量值,更加方便监测和判断。
  • print(或p): 打印表达式的值,通过表达式可以修改变量的值或者调用函数。
  • display+变量名 : 跟踪查看某个变量,每次停下来都显示它的值。
  • undisplay 跟踪显示号 取消跟踪显示。
  • info(或i)+locals : 查看当前栈帧局部变量的值,使用该命令前,先用 backtrace 命令(简写为bt)查看函数调用的栈帧,再用 frame(或f)选择栈帧;info(或i) breakpoints 查看当前设置了哪些断点。
  • watch : 设置观察点,可以具体的查看数组的某个值,如:watch input[5]。
  • info(或i)watchpoints : 查看当前设置了哪些观察点。
  • x : 从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量。可以查看越界的一些信息,如定义 tmp 数组长度为 5,通过 watch 可以查看 tmp[5] tmp[6] 等的数据。
  • quit(或q): 退出gdb调试环境。

其他技巧

由于真正开始研究接触 GDB 时间不长,原本是想这个 IDE 来监控的,可惜找不到体积小巧,功能强大的,所以还是决定研究下 GDB,这边仅能够基本操作 GDB,后续有什么新的发现,会继续补充。


To be continued...

写作时间:21:50-22:28

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,479评论 0 26
  • RMS's gdb Debugger Tutorial原文 "Don't worry if it doesn't ...
    _Xie_阅读 681评论 0 1
  • 转载 与调试器共舞 - LLDB 的华尔兹: https://objccn.io/issue-19-2/ 推荐:i...
    F麦子阅读 3,321评论 0 10
  • iOS包含许多“秘密”调试工具,包括环境变量、偏好、GCB的常规调用,等等。本技术说明描述了这些工具。如果你开发i...
    栗子烤肉阅读 3,123评论 1 7
  • 今天老妈追了几天的电视剧终于完结了,剧荒的她又找了一部现代都市亲情剧《嘿,孩子》。带娃娃的我跟着她看了几集,立马被...
    莉丝lxb阅读 145评论 0 0