【Linux】之调试器gdb

GDB是一个强大的程序调试器,用于查看和修改变量、跟踪执行流程。通过gcc-g生成带调试信息的程序,然后使用gdb加载并设置断点。断点可以在特定行或函数上,通过run、next、step、continue和backtrace命令控制程序执行和查看调用栈。print和watch命令用于查看和监视变量,set命令允许修改变量值。
摘要由CSDN通过智能技术生成

gdp是GNU发布的一个强大的程序调试工具,它能够在程序执行过程中查看和修改变量的值、跟踪程序的执行流程、定位错误等。

1 一些基本用法:

  1. 必须首先使用gcc -g生成带有调试信息的可执行程序,否则调试的时候看到的将是一堆汇编代码。例如:

    (gdb) gcc -g program.c
    
  2. 启动 gdb 并加载程序:
    使用gdb命令对生成的二进制文件a.out进行调试。

    (gdb) gdb a.out
    
  3. 查看源代码

    list命令(缩写为l)用于查看程序的源代码。可以给list命令指定行号,可以查看该行所在位置附近的(10行)代码, 如list 15(查看第15行附近的代码)。

  4. 搜索特定的内容

    如果要查找变量result,则使用search命令(forward搜索,即向文件尾搜索)。

    (gdb)search result
    

    search命令会显示第一个符合条件的行,再次按回车键找到匹配的下一行代码。

    需要backward搜索(朝向文件头),需要使用reverse-search

    (gdb) reverse-search result
    
  5. 设置断点:

    • 在想要设置断点的代码行上使用 break 命令。这个命令接受行号或者函数名作为参数。

      • 行号做参数:在 main 函数的第 10 行处设置断点:
      (gdb) break 10     #在第10行设置断点
      
      • 函数名作为参数来设置断点。
      (gdb) break function_name
      
  6. 运行程序:
    使用 run (缩写为 r )命令来运行程序至断点,程序中止,等待用户发出下一步操作指令。

  7. 调试过程:

    • 当程序执行到断点时会暂停,在此时可以使用 next (缩写为n) 命令逐行执行代码。其中还可以设置连续执行多少行,如next 2(连续执行2行)。
    • 使用 step (缩写为s)命令进入函数内部,并逐语句执行。
    • 使用 continue (缩写为c)命令继续执行直到下一个断点或程序结束。
    • 使用 backtrace (缩写为bt)命令查看函数调用栈。

    函数调用栈(Function Call Stack): 一个栈数据结构,程序调用函数的时候,其地址、参数、函数内的局部变量都会被压入栈中。通过查看函数调用栈,可以追踪函数之间的关系,观察函数参数和局部变量的值以及理解程序中错误产生位置。

  8. 查看和修改变量:

    • 使用 print (缩写为p)命令可以打印变量的值。例如,print x 打印变量 x 的值。
    • 使用watch监视某个变量的值。例如 watch sum, 当变量sum发生变化的时候,就会显示先前值与当前值以及产生变化的位置。
    • 使用 set 命令修改变量的值。例如,set x = 10 将变量 x 的值设置为 10。
  9. 退出 gdb:
    在 gdb 中使用 quit (缩写为q) 命令退出调试会话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值