gdb基础用法

GDB是什么

GNU symbolic debugger

GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等

GDB能做什么

  • ★★1.程序启动时,可以按照我们自定义的要求运行程序,例如设置参数和环境变量
  • 2.可使被调试程序在指定代码处暂停运行,并查看当前程序的运行状态(例如当前变量的值,函数的执行结果等),即支持断点调试。
  • ★★3.程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误【未使用过】

 

基础用法

1、查看调用栈 (backtrace,缩写bt)

bt [-full][n]             // 打印frame信息,打印栈帧信息的同时,打印出局部变量的值
thread apply all bt         // 查看所有线程的堆栈

C/C++程序在执行时,每调用一个函数,都会生成一个栈帧(frame,缩写 f)

  1. frame集中存放在一块大的内存中,一般称之为栈区
  2. frame在函数调用时生成,在函数调用完成时销毁。

  栈帧frame

  ① main() 主函数对应的frame,又称为初始帧或者最外层的帧。(类似洋葱)

  ② 每当程序中多调用一个函数,执行过程中就会生成一个新的frame,如果该函数是一个递归函数,则会生成多个frame.

  ③ 每个frame对应有地址作为它们的标识符,每个frame都是一块连续的内存,但不一定是frame的首地址。

  ④ gdb调试器给frame进行编号,当前正在运行函数对应的frame记为frame 0,调用它的函数记为 frame 1,以此类推。

f num        // 设置 frame num 为当前frame
up [num]     // 设置当前帧+num为当前frame
down [num]   // 设置当前帧-num为当先frame
 
info frame   // 查看当前frame的信息
info args    // 查看当前frame参数的值
info locals  // 查看局部变量的值

参考:http://c.biancheng.net/view/8282.html

 

2、查看变量的值

print,缩写p

p result                      // 打印值 
p result=10                   // 修改值
print file::variable             // 指定作用域为文件file
print func::variable             // 指定作用域为函数func
print fmt expr                // fmt用于设置打印输出的格式,如十六进制、二进制等
// 打印设置 set print array on/off      // 是否以便于阅读的格式输出数组中的元素,默认值为off. set print array-indexed on/off   // 打印数组变量的同时打印下标,默认off. set print pretty on/off      // 以便于阅读的格式打印某个结构体变量的值,默认值为off. set print address on/off      // 查看某一指针变量的值时,是否同时打印其占用的内存地址,默认值为on.
set print repeats 0             打印的时候不重复
set print elements 0       打印长度不限制
set pagination off       打印不分页
 

display

display expr                  // 打印变量或表达式
display /fmt expr              // fmt用于设置打印输出的格式,如十六进制、二进制等

info display                     // 查看display信息
undisplay linenum                // 删除自动显示
enable/disable display linenum      // 启用/禁用自动显示
delete display linenum // 删除自动显示

 

 3、带参数的调试

// 法一
gdb -args ./test_entity_fuzzy config.cfg txt1 song_20w_add_6_4.dic txt1_result 1


// 法二
gdb ./test_entity_fuzzy
set args config.cfg txt1 song_20w_add_6_4.dic txt1_result 1
b test_result

4、layout 调试

layout src

 

 

在线文档:

官方文档:ttps://sourceware.org/gdb/current/onlinedocs/gdb/index.html#SEC_Contents

100个调试技巧:https://wizardforcel.gitbooks.io/100-gdb-tips/content/show-version.html

posted on 2021-01-16 19:51  zhongqing  阅读(163)  评论(0编辑  收藏  举报