码迷,mamicode.com
首页 > 数据库 > 详细

gdb调试工具

时间:2020-02-09 16:24:29      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:splay   point   nts   missing   局部变量   必须   x86   strong   断点   

使用gdb工具,必须在编译时加上 -g选项

gcc -g main.c -o main

$ gdb a.out

基础指令

列出源码

(gdb) l 1
1       #include <stdio.h>
2       #include <stdlib.h>
3       #include <time.h>
4
5       void fun()
6       {
7               printf("---------");
8       }
9
10      int main()
# 打断点
(gdb) b 12
Breakpoint 1 at 0x4005d6: file gdbtest.c, line 12.
# run
(gdb) r
Starting program: /home/fight/demo/code/gdb/aa 

Breakpoint 1, main () at gdbtest.c:12
12              srand(time(NULL));
Missing separate debuginfos, use: debuginfo-install glibc-2.17-292.el7.x86_64
# 下一步,执行下一行,系统函数只能用n
(gdb) s
# 下一步,进入函数内部
(gdb) n
# until 19
(gdb) until 17
# 打印变量
(gdb) p age

# 继续
(gdb) continue

直接run,可以找出段错误的位置。

  • list 1 打印代码 【或者 l 1】
  • r run 【参数列表】
  • s step
  • n next
  • until
  • p var 【查看变量】
  • ptype var 【查看变量类型】
  • continue
  • b N 【在第N行打断点】
# 
b 12
# 条件断点
b 12 if i=5
  • delete N
  • finish 【 结束当前函数调用,返回调用点】
  • set args 【入口函数参数】
  • info
# 查看断点信息
info b
  • backtrace | bt【查看函数的调用栈帧,和层级关系】
(gdb) bt
#0  fun () at gdbtest.c:7
#1  0x0000000000400610 in main () at gdbtest.c:15
  • frame | f【切换函数的栈帧】
# 从#0栈帧切换到#1栈帧
(gdb) frame 1
#1  0x0000000000400610 in main () at gdbtest.c:15
15              fun();
# 查看栈帧#1 的变量
(gdb) p age
$1 = 100

站帧:随着函数调用而在stack上开辟的一片内存空间。用于存放函数调用时产生的局部变量和临时值。

  • display var 【跟踪变量】
(gdb) display age
1: age = 100
(gdb) n
age is : 100
15              fun();
1: age = 100
  • undisplay var 【取消跟踪】
(gdb) undisplay 1 # 跟踪的变量编号
  • enable breakpoints
  • disable breakpoints
  • watch 【被设置观察点的变量发生变化是,显示打印】
  • i watch 【显示观察点】

gdb调试工具

标签:splay   point   nts   missing   局部变量   必须   x86   strong   断点   

原文地址:https://www.cnblogs.com/zhuxiang1633/p/12287407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!