Linux调试-GDB

启动GDB调试

在使用GDB之前,编译出带调试信息的程序,调试信息中包含了函数和变量所在文件和行号信息,通过gcc编译出debug版本 -g:
gcc -g test.c -o test

调试方式1 : 运行GDB程序并加载程序执行

(1) 可以用 gdb test 的方式,test为可执行程序名
[root ] # gdb test
(2) 也可以先启动 gdb , 然后用 file <文件名> 命令加载可执行文件
<root> gdb
(gdb) file test

调试方式2 : 对正在运行的程序进行调试

[root ]# ps -a 查看待调试程序的进程ID号
[root ]# gdb att pid

调试常用命令
  • 1、 b : 下断点

  • 2、 X : 查看内存
    X/nfu Address
    注:
    n:显示多少个单元
    fo(octal 8进制),x(hex 16进制),d(decimal 10进制)
    u:指定要打印的内容的长度; b(Byte 1个字节),w(word 4个字节)
    例如:
    X/8xb szArry : 显示数组内容

  • 3、 p:查看
    (1) p a
    (2) 修改 :p a=12345
    (3) 查看堆栈地址内容 : p *((int *)(0x7ffffffr4ac))
    (4) 函数调用 : p Print_Hello

  • 4、 thread:线程
    (1) 查看 : info threads
    (2) 切换线程 : thread XXX
    (3) thread num 显示线程情况,num为线程号

  • 5、 r:run的简写,运行被调试的程序

  • 6、 bt : backtrace的简写,查看堆栈(调用栈)的信息

  • 7、 watch
    watch <expr>:为表达式(变量)expr设置一个观察点;变量或表达式值有变化时,马上停住程序。

    • 表达式可以是一个变量
      例如:watch value_a
    • 表达式可以是一个地址:
      例如:watch *(int *)0x12345678 可以检测4个字节的内存是否变化。
    • 表达式可以是一个复杂的语句表达式:
      例如:watch a*b + c/d

    info watchpoints: 列出当前设置的所有观察点

core文件

gdb /xxx/xxx xxx.core
bt
通过上面的命令调试.core文件,可以看出是哪个函数中出错



1. gdb的调用堆栈详解: bt

调用堆栈是当前函数之前的所有调用函数的列表(包括当前函数),每个函数及其变量都被分配了个栈帧,最近调用的函数(也就是当前函数)在0号栈帧中(栈底帧),外层的调用函数的栈帧号依次+1
gdb通过命令bt(backtrace回溯)来打印堆栈

(gdb) bt
#0
#1
#2
2. 命令 frame args

参数args表示编号numAddress,将当前栈帧设置为args指定的栈帧,并打印该栈帧的简要信息
例如:

#切换到1号栈帧,并打印1号帧的内容
(gdb) frame 1
(gdb) info locals
3. 命令up/down

在当前栈帧向上回退/向下前进(更外层/更内层,即远离0号/靠近0号)n个栈帧,n默认为1

4. 打印栈帧信息
4.1 命令 frame

打印当前栈帧的简要信息

4.2 命令 info frame

打印当前栈帧的详细信息

4.3 命令 info frame args

打印指定栈帧的详细信息

4.4 命令 info args

打印当前栈帧函数参数信息

4.5 命令 info locals

打印当前帧中的局部变量的信息,缺省情况下当前帧就是被中断的函数,也就是0号栈帧的函数

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

推荐阅读更多精彩内容