您的位置:首页 > 博客中心 > 数据库 >

GDB调试器的使用

时间:2022-03-10 17:55

http://blog.chinaunix.net/uid-23193900-id-3184605.html

 

        1. 1.数据观察命令
        2. (gdb)print <variable-name>
        3. 在GDB中,可以查看全局变量、静态局部变量、当前作用域有效的局部变量。如果局部变量与全局变量冲突,而需要查看全局变量的值,可以使用“::”操作符
        4. (gdb)print <file::variable>
        5. (gdb)print <function::variable>
        6. 如:
        7. (gdb)print ‘main.c‘::a
        8. 2.对程序中函数的调用
        9. 调用函数时指定形参的值
        10. (gdb)print func(arg1,arg2,...)
        11. 3.查看表达式的值
        12. (gdb)print <expression>
        13. 4.查看数组的值
        14. (gdb)print <array-name>
        15. gdb中@操作符的使用:
        16. (gdb)print *array@len
        17. array是一段连续的内存空间的起始地址,len是需要查看内存的长度。
        18. array可以是数组,也可以是动态分配的堆区间。
        19. 如果是静态数组,直接:
        20. (gdb)print 数组名
        21. 就能显示全部数据
        22. 5.查看内存
        23. examine命令,可以让用户查看指定内存中的值
        24. (gdb)examine /nfu <address>
        25. 参数:
        26.    n:一个正整数,表示显示几个单位的内存
        27.    f:显示的格式,进制(u十六进制)或字符串(s)或指令(i)
        28.    u:单位,b=1 字节, h=2 字节,w=4字节,g=8 字节。
        29. 6.查看寄存器
        30. (gdb)info registers
        31. (gdb)info all-registers
        32. (gdb)info registers-name
        33.  
        34. 7.自动显示变量
        35. 使用display命令,可以在程序单步执行或遇到断点时,自动显示变量值。
        36. (gdb) display/fmt expr
        37. 参数:fmt,可以是 十六进制(x),十六无符(u)
        38.                   十进制(d)   八(o)  二进制(t) 字符格式(c) 浮点格式(f)
        39.  
        40. info display可以查看display设置的自动显示的信息。
        41. undisplay删除自动显示。disable与enable也适用于该命令。

         


5.使用GDB跟踪栈上数据(栈中数据都是局部变量)
   每个函数和它的变量都有一个栈帧-frame,当前栈帧总是frame 0。所有这些frame形成一个程序完整的运行栈。可以使用backtrace命令打印栈帧的信息。
 
命令:
(gdb)bt
 
如果在main函数里调用了func()函数,此时正在执行func()函数,这时的栈帧frame 0 就是func()函数的。
使用命令info locals 打印的变量就是当前栈帧的。
如果要查看main()函数的栈帧中的局部变量,可以使用命令"(gdb) frame 1 "进行切换。

GDB调试器的使用,布布扣,bubuko.com

热门排行

今日推荐

热门手游