zoukankan      html  css  js  c++  java
  • Linux GDB常用命令

    Linux GDB 常用命令如下

    1.启动和退出gdb

    (1)启动:gdb ***:显示一段版权说明; (*** 表示可执行程序名)

    (2)退出:quit。有的时候输入quit后会出现相关提示:类似于“(y/n)”,输入y

    2.显示和查找程序源代码

    (1)list :显示10行代码,但是我为什么没有显示成功呢?

    (2)list 5,10:显示源文件第五行到第十行的代码

    (3)list t4.c:5,10:显示源文件中第五行到第十行的代码,在跳是含有多个源文件的次序时使用;

    (4)list get_sum:显示get_sum函数周围的代码//什么叫周围的代码呢?

    (5)list t4.c :get_sum:显示源文件t4.c中第五行到第十行的代码,在跳是含有多个源文件的次序时使用;
    (6)如果在调试中运行linux命令,则可以在gdb的提示符下输入shell命令. (gdb)shell ls
    (7)search forward用来从当前行向前查找第一个匹配的字符串;
               search get_sum   forward get_sum
    (8)reverse_search 用来从当前行想前查找第一个匹配的字符串:  Example:  reverse_search main


    3.执行程序和获得帮助;
           gdb -q test 或者file test只是装入程序,程序并没有运行。如果要程序开始运行,在gdb提示符下输入run即可。
           如果想要详细了解gdb某个命令的使用方法,可以用help 命令 Example:(gdb)help list   (gdb)help all


    4.设置和管理断点
    (1)以行号设置断点:(gdb)break 7 
    (2)以函数名设置断点:(gdb)break get_sum
    (3)以条件表达式设置断点:方法一:break 行号或者函数名 if  条件.  Example:  (gdb)break 7 if i==99
                                                           方法二:watch 条件表达式,下面是具体的举例:
                                                           方法三:awatch;用来给表达式设置断点,在表达式的值发生改变或者表达式的值杯读取的时候,程序暂时停止;
      (4).查看当前设置的断点:info breakpoints
        Num     Type           Disp Enb Address    What
        解释:Num列表示断点的编号,Type指明类型,类型位breakpoints说明是中断。Disp指示中断点在生效一次后是否就失去作用,如果是则为dis,不时则为keep。     Bnb表明当前中断点是否有效,如果是y,不是则为n。Address列表中断所处的内存地址。What列出中断发生在哪个函数的第几行。


    5.使断点失效或者有效
    使用“disable  断点编号”命令可以是某个断点失效,程序运行到该段点时不会停下来而是继续运行。

    使用“enable 断点编号”命令可以是某个断点恢复有效。

    6.删除断点
    disable只是让某个断点暂时失效,断点依然存在与程序中。如果要彻底的删除某个断点,可以使用clear或者delete命令。
    (1)clear:删除程序中所有的断点;
    (2)clear 行号:删除此行中的断点
    (3)clear 函数名:删除该函数的断点
    (4)delete 断点编号:删除指定编号的断点。如果一次要删除多个断点,各个断点编号以空格隔开。

    7.查看和设置变量的值
    (1)print  变量或表达式 --- print  变量=值:对变量赋值 --- print  表达式@要打印的值的个数n:打印以表达式值开始n个数

    (2)whatis命令:显示某个变量或表达式的数据类型。格式:whatis 变量或者表达式
    (3)set 命令:给变量赋值,格式:set variable 变量=值
           将上面实例中的print i=200改为set variable i=200可以得到同样的效果//这个不懂矮。。
           除了这个用法外,set命令还有一些其他用法。比如可以针对远程调试进行设置,可以用来设置gdb一行的字符数等。

    8.控制程序的执行
    (1)continue命令:让程序继续运行,直到下一个断点或者运行完为止。格式:continue
    (2)kill命令:用于结束当前程序的调试

    (3)next和step命令
       区别:如果遇到函数,next会把函数调用当作一条语句来执行,再次输入next会执行函数调用后的语句;

       而step则会跟踪进入函数,一次一条的执行函数内的代码,直到函数内的代码执行完,在进行函数调用后的语句;
    (4)nexti和stepi命令:用来单步执行一条机器指令,注意不是单步执行一条鱼据。单步执行一条语句使用next和step命令。通常一条语句有多条机器指令构成的。
       注意的是:gdb的一些命令可以简写,比如list可以用li来代替,continue命令可以用cont来代替。

    9. Linux GDB命令与Visual Studio Debug下命令对比:

                                    Linux                                                   windows

         进入调试                       gdb *.exe                                             F5

                                                      quit                                     

         增加/取消断点                    break  LineNumber                    F9

                          clear   LineNumber 

        单步运行        next                                                      F10

                                                      step                                                      F11

         开始调试运行      run                                                       F5

      运行到下一个断点    continue                                             F5

         结束调试        kill                                                       shift+F5

    编程是一种快乐,享受代码带给我的乐趣!!!
  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/hacker007/p/9549530.html
Copyright © 2011-2022 走看看