gdb 使用

https://blog.youkuaiyun.com/l460133921/article/details/52931328/

https://blog.youkuaiyun.com/zhu929033262/article/details/76064044

https://blog.youkuaiyun.com/jiangzhongguke/article/details/78647138

https://blog.youkuaiyun.com/zhanglidn013/article/details/71405318 directoryset substitute-path

https://blog.youkuaiyun.com/analogous_love/article/details/53333894  gdb ui

 

 

 

	https://blog.youkuaiyun.com/tzshlyt/article/details/53668885

gcc -g  main.c                      //在目标文件加入源代码的信息
gdb a.out       

(gdb) start                         //开始调试
(gdb) n                             //一条一条执行
(gdb) step/s                        //执行下一条,如果函数进入函数
(gdb) backtrace/bt                  //查看函数调用栈帧
(gdb) info/i locals                 //查看当前栈帧局部变量
(gdb) frame/f                       //选择栈帧,再查看局部变量
(gdb) print/p                       //打印变量的值
(gdb) finish                        //运行到当前函数返回
(gdb) set var sum=0                 //修改变量值
(gdb) list/l 行号或函数名             //列出源码
(gdb) display/undisplay sum         //每次停下显示变量的值/取消跟踪
(gdb) break/b  行号或函数名           //设置断点
(gdb) continue/c                    //连续运行
(gdb) info/i breakpoints            //查看已经设置的断点
(gdb) delete breakpoints 2          //删除某个断点
(gdb) disable/enable breakpoints 3  //禁用/启用某个断点
(gdb) break 9 if sum != 0           //满足条件才激活断点
(gdb) run/r                         //重新从程序开头连续执行
(gdb) watch input[4]                //设置观察点
(gdb) info/i watchpoints            //查看设置的观察点
(gdb) x/7b input                    //打印存储器内容,b--每个字节一组,7--7组
(gdb) disassemble                   //反汇编当前函数或指定函数
(gdb) si                            // 一条指令一条指令调试 而 s 是一行一行代码
(gdb) info registers                // 显示所有寄存器的当前值
(gdb) x/20 $esp                    //查看内存中开始的20个数

--------------------- 
作者:tzshlyt 
来源:优快云 
原文:https://blog.youkuaiyun.com/tzshlyt/article/details/53668885 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

    https://blog.youkuaiyun.com/analogous_love/article/details/53333894

gdb调试一直是一个让人头疼的问题,我这个多年的linux用户也一直不习惯gdb,主要是因为gdb在调试的时候不能很好的展示源码。gdb里面可以用list命令显示源码,但是list显示没有代码高亮,我忍了,可是list这种显示代码的方式,使得我总不能一眼定位到正在执行的那行代码。

可以毫不夸张的说,这个问题是阻止我长期使用gdb的最大的障碍。这是如此的不便,以至于GNU都想办法解决了————使用gdb自带的gdbtui。

先来看一张效果图,是我在使用gdbtui调试mysql时的截图,这样看代码比使用list命令方便多了吧。

 

下面正式介绍gdbtui。

#1. 打开TUI模式

    方法一: 使用gdbtui or gdb-tui开始一个调试。

      gdbtui -q sample

    友情提示:通过下面的方式调试一个正在运行的进程

      gdb  -p pid

    如果出现如下错误,请参考这里。

      Could not attach to process.  If your uid matches the uid of the target
      process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
      again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf

    方法二: 直接使用gdb调试代码,在需要的时候使用切换键 ctrl+x a调出gdbtui。

#2. TUI模式下有4个窗口,

    (cmd)command 命令窗口. 可以键入调试命令
    (src)source 源代码窗口. 显示当前行,断点等信息
    (asm)assembly 汇编代码窗口
    (reg)register 寄存器窗口

最常用的也就是默认使用的方式,也可以通过layout命令来进行选择自己需要的窗口,可参见help layout.

#3. gdbtui相关的其他命令

    layout

    用以修改窗口布局

     help layout
     layout src
     layout asm
     layout split

    winheight

    调整各个窗口的高度。

     help winheight
     winheight src +5
     winheight src -4

    space

    当前窗口放大或者缩小以后,gdbtui窗口不会发生变化,我们可以通过space 键强行刷新gdbtui窗口。

    focus next / prev

    在默认设置下,方向键和PageUp PageDn 都是用来控制gdbtui的src窗口的,所以,我们常用的上下键用来显示前一条命令和后一条命令的功能就没有了, 不过这个时候我们可以通过ctrl + n / ctrl +p 来获取这个功能。

    ps:当我们通过方向键调整了gdbtui 的src 窗口以后,可以通过update命令重新把焦点定位到当前执行的代码上。

    我们可以通过focus命令来调整焦点位置,默认情况下是在src窗口,通过focus next命令, 焦点就移到cmd窗口了,这时候就可以像以前一样,通过方向键来切换到上一条命令和下一条命令。

     help focus
     focus cmd
     focus src

    焦点不在src窗口以后,我们就不同通过方向键来浏览源码了。

参考:http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_19.html


文章来源:http://mingxinglai.com/cn/2013/07/gdbtui/
---------------------  
作者:analogous_love  
来源:优快云  
原文:https://blog.youkuaiyun.com/analogous_love/article/details/53333894  
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值