设为首页 加入收藏

TOP

GDB调试指南-变量查看(二)
2019-09-03 01:10:07 】 浏览:37
Tags:GDB 调试 指南 变量 查看
  • f 按浮点数格式显示变量。
  • 还是以辅助程序来说明,正常方式打印字符数组c:

    (gdb) p c
    $18 = "hello,shouwang"

    但是如果我们要查看它的十六进制格式打印呢?

    (gdb) p/x c
    $19 = {0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x73, 0x68, 0x6f, 0x75, 0x77, 0x61, 
      0x6e, 0x67, 0x0}
    (gdb)

    但是如果我们想用这种方式查看浮点数的二进制格式是怎样的是不行的,因为直接打印它首先会被转换成整型,因此最终会得到8:

    (gdb) p e
    $1 = 8.5
    (gdb) p/t e
    $2 = 1000
    (gdb) 

    那么就需要另外一种查看方式了。

    查看内存内容

    examine(简写为x)可以用来查看内存地址中的值。语法如下:

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

    其中:

    • n 表示要显示的内存单元数,默认值为1
    • f 表示要打印的格式,前面已经提到了格式控制字符
    • u 要打印的单元长度
    • addr 内存地址

    单元类型常见有如下:

    • b 字节
    • h 半字,即双字节
    • w 字,即四字节
    • g 八字节

    我们通过一个实例来看,假如我们要把float变量e按照二进制方式打印,并且打印单位是一字节:

    (gdb) x/4tb &e
    0x7fffffffdbd4:    00000000    00000000    00001000    01000001
    (gdb) 

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

    自动显示变量内容

    假设我们希望程序断住时,就显示某个变量的值,可以使用display命令。

    (gdb) display e
    1: e = 8.5

    那么每次程序断住时,就会打印e的值。要查看哪些变量被设置了display,可以使用:

    (gdb)info display
    Auto-display expressions now in effect:
    Num Enb Expression
    1:   y  b
    2:   y  e

    如果想要清除可以使用

    delete display num #num为前面变量前的编号,不带num时清除所有。

    或者去使能:

    disable display num  #num为前面变量前的编号,不带num时去使能所有

    微信公众号【编程珠玑】:专注但不限于分享计算机编程基础,Linux,C语言C++,算法,数据库等编程相关[原创]技术文章,号内包含大量经典电子书和视频学习资源。欢迎一起交流学习,一起修炼计算机“内功”,知其然,更知其所以然。

    公众号编程珠玑公众号编程珠玑

    查看寄存器内容

    (gdb)info registers
    rax            0x0    0
    rbx            0x0    0
    rcx            0x7ffff7dd1b00    140737351850752
    rdx            0x0    0
    rsi            0x7ffff7dd1b30    140737351850800
    rdi            0xffffffff    4294967295
    rbp            0x7fffffffdc10    0x7fffffffdc10
    (内容过多未显示完全)

    总结

    通过不同方式查看变量值或者内存值能够极大的帮助我们判断程序的运行是否符合我们的预期,如果发现观察的值不是我们预期的时候,就需要检查我们的代码了。

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇理解Device Tree Usage 下一篇linux 学习第十一天

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目