GDB 调试过程

1 篇文章 0 订阅

一.gdb

1.gdb
        启动gdb
2.gdb -tui
        启动gdb,并且分屏显示源代码
3.gdb app
        启动gdb调试指定程序app
4.gdb <program> <PID>
        启动程序之后,再用gdb调试
5.gdb <PID> 
        启动程序之后,再启动gdb调试
6.**启动gdb之后的交互命令
  file app
        载入指定的程序
7.set args <var>
        修改发送给程序的参数

 二. list

<linenum>           行号。 
<+offset>           当前行号的正偏移量。 
<-offset>           当前行号的负偏移量。 
<filename:linenum>  哪个文件的哪一行。 
<function>          函数名。 
<filename:function> 哪个文件中的哪个函数。 
<*address>          程序运行时的语句在内存中的地址。  

set listsize <count>
设置一次显示源代码的行数。

show listsize
查看当前listsize的设置。
r:运行程序
n:单步执行
c:继续运行
p 变量 :打印变量的值
bt:查看函数堆栈
jump +1 :跳行

三. break

<number>          当前的文件中某一行(假设为6)设定断点。
<number if conf>  如果conf成立,就在number行处断点。
<func>            当前的文件中为某一函数(假设为func)处设定断点。
<fileName:N>      给指定文件(fileName)的某个行(N)处设置断点: 
<代码地址>

enable/ena        N:启用断点
disable/dis       N:禁用断点

显示当前gdb断点信息
                  info breakpoints
                  i breakpoints
                  i b

四.print / p

1.print var
        print显示变量(var)值
2.print /x var
        用16进制显示(var)值

    x  按十六进制格式显示变量。 
    d  按十进制格式显示变量。 
    u  按十六进制格式显示无符号整型。 
    o  按八进制格式显示变量。 
    t  按二进制格式显示变量。 
    a  按十六进制格式显示变量。 
    c  按字符格式显示变量。 
    f  按浮点数格式显示变量。

3.print *a@10
       a是一个数组,10个元素
4.print x=4
       修改运行时候的变量值

五.其他

1.finish
        执行完当前函数返回到调用它的函数 ​​​
2.until/u
        指定程序直到退出当前循环体 
3.jump 5
        跳转执行程序到第5行
4.return
        强制返回当前函数
5.call <expr> 
        强制调用函数: 
  print <expr> 
		强制调用函数2:
【如果函数的返回值是void那么call不会打印返回值,但是print还是会打印出函数的返回值并且存放到历史记录中。】 
6.kill
        终止一个正在调试的程序

7.display:追踪查看具体变量值
  undisplay:取消追踪观察变量

8.
  watch:被设置观察点的变量发生修改时,打印显示
  i watch:显示观察点

 六. layout

layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout

Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。

七.调试多线程

(1)查看可切换调试的线程:info threads

(2)切换调试的线程:thread 线程id

(3)只运行当前线程:set scheduler-locking on

(4)运行全部的线程:set scheduler-locking off

(5)指定某线程执行某gdb命令:thread apply 线程id gdb_cmd

(6)全部的线程执行某gdb命令:thread apply all gdb_cmd

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值