GDB调试如何进行变量查看

描述

变量查看

  • 变量查看: 最常见的使用便是使用print(可简写为p)打印变量内容。
    以上述程序为例:

    gdb helloworld
    break helloworld.c:17 if i == 0
    (gdb) run
    Starting program: /home/book/helloworld
    helloworld.
    
    Breakpoint 2, main (argc=1, argv=0x7fffffffdca8) at helloworld.c:17
    17            result += i;
    (gdb) print i                < ------------------ 查看变量 i 当前的值
    $1 = 10
    (gdb) print result           < ------------------ 查看变量 result 当前的值
    $2 = 45
    (gdb) print argc             < ------------------ 查看变量 argc 当前的值
    $3 = 1
    (gdb) print str
    $4 = 0x4006c8 "Hello World" < ------------------ 查看变量 str 当前的值
    
  • 查看内存: examine(简写为x)可以用来查看内存地址中的值。语法如下:

    x/[n][f][u] addr
    

    其中:

    单元类型常见有如下:

    示例:

    (gdb) x/4b str
    0x4006c8:    01001000    01100101    01101100    01101100
    

    可以看到,变量 str 的四个字节都以二进制的方式打印出来了。

    • b 字节
    • h 半字,即双字节
    • w 字,即四字节
    • g 八字节
    • n 表示要显示的内存单元数,默认值为1
    • f 表示要打印的格式,前面已经提到了格式控制字符
    • u 要打印的单元长度
    • addr 内存地址
  • 查看寄存器内容: info registers

ra             0x3ff7ef2282     0x3ff7ef2282 < __libc_start_main+160 >
sp             0x3ffffffaa0     0x3ffffffaa0
gp             0x2aaaaac800     0x2aaaaac800
tp             0x3ff7fdd250     0x3ff7fdd250
t0             0x3ff7ed60b0     274742468784
t1             0x3ff7ef21e2     274742583778
t2             0x2aaaaac4f0     183251944688
fp             0x3ffffffab0     0x3ffffffab0
s1             0x0      0
a0             0x1      1
a1             0x3ffffffc28     274877905960
a2             0x3ffffffc38     274877905976
a3             0x0      0
a4             0x3ffffffad8     274877905624
a5             0x0      0
a6             0x3ff7fd88a8     274743527592
(内容过多未显示完全)
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分