• LINUX 下 GDB 调试小结>基础知识


    //!> 注意:binary 是 gdb_
    //!> 注意:() 里面也是可以的    
    //!> 应用最频繁的    

    0.        -g                           //!> 编译加上-g可以将代码编入,否则有些指令无效    
    1.         file     gdb_            //!> 将binary导入
    2.        l( list )                     //!> 显示代码段
                                              //!> 注意前提是将代码编译进去,也就是编译是加上-g
    3.        r( run )                    //!> run
    4.        c( continue )           //!> 继续run直到下一个断点处
    5.        b                             //!> 增加断点,后面参数是行数就可以了
                                              //!> 参数也可以是函数名称( 设置在第一个执行代码行处 )
    6.        info break               //!> 显示当前的断点信息                                
    7.        s( next )                  //!> 从当前位置单步执行
    8.        p( print )  n              //!> 显示n当前的值
    9.        bt                             //!> 查看函数堆栈
    10.        finish                      //!> 退出函数
    11.        help                        //!> 注意第一次显示的仅仅是命令种类,要细察还要接着对每项
                                               //!> 查询        
    12.        set args XXX XXX    ...    //!> 当函数代参执行即run之前可以写入参数
    13.        show args              //!> 显示参数
    14.        q( quit )                  //!> 退出
    15.        cd                          //!> 与shell的cd是一样的
    16.        pwd                       //!> 显示当前工作目录
    17.        u( until )                 //!> 单步时跳过一个循环体
    18.        si或ni                     //!> 单步跟踪机器指令!!!

    >:    修改变量值和命名问题
        >: print x = 9                   //!> 修改x的值为9
        >: if 某个变量与GDB的命令重名,我们要使用var
           例如:有一个width变量,现在设置值
           一般 set width = 47就好,但是不对,
           但是set width是GDB命令,所以报错,
           此时处理:set var width = 47就可以!

    >:    跳转执行:GDB 可以修改程序的执行顺序
        jump <line>:跳到某行
        jump <addr>:跳到addr地址处
        
    >:    强制函数返回
        如果你的调试断点在某个函数中,并还有语句没有执行完。你可以使用 return 命令强制函
        数忽略还没有执行的语句并返回。
        return
        return <exp>
        
    >:    强制调用函数
        call <exp>
        
    >:     暂停/恢复程序运行
        >: 暂停:
        断点(breakpoint):前面说过
        观 察 点(watchpoint)
        捕捉点(catchpoint)
        信 号 ( signals)
        线程停止(thread stops)
        
        >: 恢复:
        如果要恢复程序运行,可以使用 c 或者 continue 命令。
        也可以用s( step )或者n( next )执行单步!
        
    >:     运行环境:
        path <dir>:可以自己设置程序运行路径
        show paths:查看运行路径
        set environment( env ) varname[=value]:设置环境变量,例如:set env USER=hchen
        show environment( env ) [varname]:查看环境变量,例如:show env USER

    >:    程序的输入输出
        info terminal 显示程序用到的终端的模式使用重定向空值程序输出。如 run>outfile
        tty 命令可以指定写输入输出的终端设备。如 tty /dev/ttyb


    >:    启动 GDB 的方法有以下几种:
        1、 gdb <program>
            program 也就是你的执行文件,一般在当前目录下。
        2、 gdb <program> core
            用 gdb 同时调试一个运行程序和 core 文件,core 是程序非法执行后 core dump 后
            产生的文件。
        3、 gdb <program> <PID>
            如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID。gdb
            会自动 attach 上去,并调试它。program 应该在 PATH 环境变量中搜索到。

    >:    注意:
            敲入 命令第一个字母, 按两次 TAB 键,你会看到所有 此字母 开头的命令:

    >:     当我们需要某个函数增加断点时候,但是不知道函数的全拼,只知道前面几个字母,那么
        就可以执行: b  fu <TAB><TAB> 就可以查看到了( 此处以fn开头的函数 )

    >:    当然在GDB中也可以运行shell命令:shell <cmd>

    >:    可以在GDB中make重新编译改过的代码!:make <-args>

    >:    关于list指令
        list:显示当前行后面的源程序
        list-:显示当前行前面的源程序
        list <line>:显示第几行的源程序
        list <fun>:显示函数fun的源程序
        
    >:    十、 查看寄存器
        要查看寄存器的值,很简单,可以使用如下命令:
        info registers:
                        查看寄存器的情况(除了浮点寄存器)。
        info all-registers:
                        查看所有寄存器的情况(包括浮点寄存器)。
        info registers<regname...>:
                        查看所有指定的寄存器的情况。
        寄存器中放置了程序运行时的数据,比如程序当前运行的指令地址(ip),程序的当前堆栈地址
        (sp)等等。你同样可以使用 print 命令来访问寄存器的情况,只需要在寄存器名字前加一个
        $符号就可以来看。如:p $eip。
       

  • 相关阅读:
    The Chinese Postman Problem HIT
    Chinese Postman Problem Aizu
    矩阵游戏 HYSBZ
    最大获利 HYSBZ
    asp.net+MVC--1
    -----IT男生涯————初始篇
    Permutation
    RMQ with Shifts
    Fast Matrix Operations
    "Ray, Pass me the dishes!"
  • 原文地址:https://www.cnblogs.com/xyz123753/p/GDB_Debugging.html
Copyright © 2020-2023  润新知