Linux日记-gdb命令

【程序】

 [编译成未链接的目标程序/.o文件]
    [没有符号表被读取。请使用 "file" 命令]    
        First, did you correctly compile the c program? Like:
            gcc -g your.c -o aaa
        Once you finish compiling the program, use below command to gdb it:
            gdb aaa
        Or if you start gdb w/o specifying the program `aaa‘, you can input
            `file aaa‘
        in the gdb shell.
    [执行程序]
        run:重新执行
    [查看变量/需要断点]
        print/p +变量名
            若把断点设置在循环体内部想要循环输出变量值,则需要next命令执行下一条语句。
        [按格式输出变量]
            p i:正常输出;p/c i:字符格式;p/t i:二进制格式
            
    [调用函数/需要断点]
        break 19
        run
        print func(3)    //函数中的形参必须换成实参
    [查看数组/需要断点]
        break 12
        run
        print sz
    [自动显示变量/需要断点]
        break 15
        run
        display/d i        //格式化自动输出i
        display/d result    //格式化输出result
        step/next            //执行下一步并显示当前display中自动输出变量(i和result)的值
        info display    //查看当前display中的自动显示变量的编号+格式+变量名
        [删除自动显示变量]
            delete display 1    //根据info得到的编号删除某个自动显示变量
            undisplay            //删除当前display中所有的变量
        [启用/禁用自动提示]
            disable display [1]    //display后加行号表示禁用当前行,不加表示禁用所有行
            enable display [1]    //启用,作用同上
            disable display 1 2    //中间空格可以操作多个自动显示变量

【断点】

注:<1>断点之后的命令不会自动执行(无论是main还是其他函数中),只能手动一步步走;
        <2>断点会跟着调用函数从而进入外部函数体内。
    [新建断点]
        break 1
    [删除端点]
        <1>(gdb)delete breakpoint 1    //删除当前位置断点,1代表第一个断点
        <2>clear    //删除程序上次停止处的断点
        <3>clear 20    //删除第20行的所有断点
        
    [设置断点有效无效]
        enable/disable breakpoint
    [查看当前断点信息]
        info break/b
    [断点处变量数值]
        print/p +变量名
            若把断点设置在循环体内部想要循环输出变量值,则需要next命令执行下一条语句。
    [快捷键进入下一个断点]
        注:<1>[断点之后]可以使用run、continue、next、step继续执行。
            <2>断点停下来后如果被继续执行了一次,那么接下来的程序执行可以使用Enter代替刚才的命令。
            #.run continue next step的区别
              [run]:头部=>断点
                  是指把gcc -c编译好的中间程序从头执行,保留断点/自动显示等属性;
              [continue]:断点=>结束/循环一次
                  如果断点不在循环内部,那么执行一次就直接输出结果;如果断点在循环里面,那么执行一次就等于进行了一次循环(方便~);
              [step]:断点=>断点+1命令行(进入被调函数)
                  如果命令将要运行的源代码行上有函数调用,那么step命令将导致GDB进入到被调用函数的内部。        
              [next]:断点=>断点+1命令行(不进入被调函数)
                  则和step不同,它不会进入函数,而是在出口坐等。
            //以上四种都可以在断点后设置自动显示变量,特别是在循环内部用于监控数值变化。
    [条件断点]:符合条件时断点才会出现,用于循环/判断中
        <1>break 6    //假设info break是2号
           condition 2 i==5    //当i=2时在第6行加上断点,其他情况等于这个断点不存在
        <2>break 6 if i==5    //含义同上,只不过合起来写了

时间: 2024-10-24 10:23:09

Linux日记-gdb命令的相关文章

【Linux】GDB调试工具

GDB调试工具 Linux中包含一个很强大的调试工具GDB(GNU Debuger),可以用它来调试C和C++程序. 一. GDB的主要功能有: 设置断点,当程序运行到断点处暂停 显示变量的值,可以打印或者监视某个变量,将变量的值显示出来 单步执行,GDB允许用户单步执行程序,可以跟踪进入函数和从函数中退出 运行时修改变量的值,GDB允许在调试状态下修改变量的值,此功能在测试程序的时候特别有用 路径跟踪,GDB可以将代码的路径打印出来,方便用户跟踪代码 线程切换,在调试多线程的时候,此种功能是必

linux中gdb的可视化调试

今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成的可执行文件,用gdb -tui -q p2psrv(要debug的命令),就可以进入一个类似的可视化的调试界面. 之后相信一些基本的gdb操作大家都应该清楚. backtrace:查看各级函数调用及参数 finish:连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 :选

用gdb分析core文件及常见gdb命令操作示例

1.概述 在实际的软件开发项目中,程序出现问题是在所难免的.遥想本人参加工作之后首次遇到程序的情景,至今还历历在目.之前的经验告诉我,我们越是惊慌失措,问题就越是解决不了.我们要先让自己平静下来,然后再寻找解决程序问题的办法. 在Linux下做开发的朋友,想必都与core文件打过交道.当看到自己的程序运行之后出现core时,很多人都慌乱了,仿佛天快要塌下来一样.其实,我们大可不必如此,只要我们掌握了用gdb调试core文件的办法,依然可以很快定位程序问题,一举将bug消灭掉.有关Linux co

Linux系统管理常用命令

Linux系统管理常用命令 分类: Linux2011-01-10 18:26 1538人阅读 评论(0) 收藏 举报 linuxcommandservicenginxuserunix 目录(?)[+] 1. 时间date 1)显示当前时间: date .//Wed Jul 29 11:05:11 CST 2009  2)date修改时间:date -s  date 修改时间2007-08-29 14:41 date -s 14:36:30   //时间为14点36分30秒 date 08291

使用linux的GDB打印STL(vector,map,set..................)

在linux用gdb或者cgdb计较不爽的地方是无法打印STL的东西,所有啊去网上找了找解决方案https://www.douban.com/note/182826844/?qq-pf-to=pcqq.c2c 本帖把怎么配置这个东西写出了,万一以后忘了,可以回头找找. 首先是下载gdb文件 https://sourceware.org/gdb/wiki/STLSupport    ------>找到网页里面的  然后点击进去下载stl_views_1.0.3.gdb 接下来把这个东西当到linu

【Linux】gdb调试core文件

编写服务器端程序,很容易遇到Crash问题,比较幸运的是Linux提供了core file,保留了Crash的现场.有时候,根据当前的调用栈,并且打印出当前栈的变量就可以分析出crash的原因,但是,有时候看到调用栈却束手无策.下面就介绍自己通过GDB的几个命令的结合,发现一个crash的原因的过程. 下面让我们一起进入现场,来逐步发现其中的原因. 首先,还是运行gdb 命令,gdb wbxgs core.5797,来看看现场. [[email protected] bin]# gdb wbxg

gdb系列之三 GDB命令

 假如缩写是无歧义的话,你可以将一个GDB命令缩写为开头的几个字母:你也可以用回车键来重复一些GDB命令.你也可以 用TAP键来让GDB补全一个命令的剩余部分(或者告诉你可供选择的命令,假如不止一个命令可选的话). 3.1 命令语法 一个GDB命令是单独的输入行.没有长度限制.命令由一个命令名开始,接着是提供给命令的参数.例如,命令step接收 一个代表步长的参数,就像"step 5″.你也可以用不带参数的step命令.某些命令不允许参数. GDB命令名总是在没有歧义的情况下允许截短.在某些

Linux下gdb调试

关于gdb的其他客套话不多说,直接进入正题. 一.gdb基本命令列表: 命令 解释 简写 file 装入想要调试的可执行文件 无 list 列出产生执行文件源代码的一部分 l next 执行一行源代码但不进入函数内部 n step 执行一行源代码而且进入函数内部 s run 执行当前被调试的程序 r continue 继续执行程序 c quit 终止gdb q print 输出当前指定变量的值 p break 在代码里设置断点 b info break 查看设置断点的信息 ib delete 删

常用 GDB 命令中文速览

转自:https://linux.cn/article-8900-1.html?utm_source=index&utm_medium=moremore 目录 break -- 在指定的行或函数处设置断点,缩写为 b info breakpoints -- 打印未删除的所有断点,观察点和捕获点的列表,缩写为 i b disable -- 禁用断点,缩写为 dis enable -- 启用断点 clear -- 清除指定行或函数处的断点 delete -- 删除断点,缩写为 d tbreak --