开发,设计,生活

系统开发

  • 2012-01-07 03:53:22 2012-04-09 15:09:11[U] 系统开发

    GDB常用命令

    0. 编译

    为了给GDB提供调试信息,编译源代码时应使用"-g"选项(GCC还提供了"-ggdb"可供使用)。

    GCC支持同时使用"-g"与"-O"选项,但某些编译器不支持。

    1. GDB命令行

    命令行格式

    gdb [options] [executable-file [core-file or process-id]]
    gdb [options] --args executable-file [inferior-arguments ...]

    常用选项

    选项说明
    --args传递给被调试程序的参数
    --cd=DIR
    -cd=DIR
    切换当前路径为DIR
    --command=FILE
    -command=FILE
    -x FILE
    从FILE中读取GDB命令序列
    --batch以非交互方式执行由--command选项指定的命令序列
    --core=COREFILE
    -core=COREFILE
    -c COREFILE
    加载分析core dump文件COREFILE
    --pid=PID附着到进程PID
    --directory=DIR
    -directory=DIR
    -d DIR
    指定源文件搜索文件夹
    --exec=EXECFILE
    -exec=EXECFILE
    -e EXECFILE
    指定EXECFILE为被调试程序
    --symbols=SYMFILE
    -symbols=SYMFILE
    -s SYMFILE
    从SYMFILE中读取符号信息
    --help
    -h
    获取命令行帮助信息
    --version获取版本信息

    2. 基本命令

    获取帮助或其他信息

    命令功能
    help, hgdb命令列表
    help command给出命令command相关帮助
    help class给出class主题中的命令
    apropos key-word查找并给出包含有关键字key-word的gdb命令主题
    complete args查找并给出所有以args开头的命令
    <TAB>自动补全命令或给出所有可能的命令(类同于complete)
    info, i给出程序的各种当前状态信息
    set设置GDB环境变量
    show给出GDB状态信息

     

    文件/路径操作

    命令功能
    file [execfile]使用execfile作为被调试程序及符号文件;如为空则清除当前被调试程序及符号文件
    core [corefile]使用corefile作为core dump文件;为空则清除当前core dump文件
    exec [execfile]使用execfile作为被调试程序;为空则清除当前可执行文件
    symbol [symfile]使用symfile作为符号文件;为空则清除当前符号文件
    add-symbol-file symfile addr添加符号表文件sfile至地址addr
    info files显示当前工作文件信息
    path dirs将路径添加到执行文件和符号文件搜索路径中
    show path给出可执行文件/符号文件搜索路径
    info share给出当前已加载的共享库

    源文件相关命令

    命令说明
    dir [directories]将directories添加至源文件路径列表中;如为空则清除源文件路径列表
    show dir给出当前源文件路径列表
    list显示(源文件当前位置)随后的10行(数值可设置)
    list -显示前10行
    list [file:][num|func]显示指定位置处的上下文
    list [+|-]off源代码中当前位置的后/前off行
    list *addr显示包含了地址addr的行
    list f, l从第f行显示至第l行
    info line num显示第num行编译后的起/止地址
    info source显示当前源文件名
    info sources显示当前使用中的所有源文件件
    forw regex向后查找包含有正则表达式regex的行
    rev regex向前查找包含有正则表达式regex的行

    程序控制

    命令说明
    set args [arglist]设置/清空程序运行时命令行参数
    show args显示命令行参数
    set env var [value]设置/清除环境变量var值(为value)
    show env给出当前环境变量列表
    run [args], c [args](指定命令行参数)运行
    continue, c继续执行
    step [line-num]
    s [line-num]
    执行下一句/num句代码。如遇函数调用,进入函数内部
    next [line-num]
    n [line-num]
    执行下一句/num句代码。如遇函数调用,不进入函数内部
    until expr继续执行,直到指定的行
    expr可以是[file:]line-num, [file:]func-name等
    stepi, si执行下一句汇编指令,如遇函数,进入内部
    nexti, ni执行下一句汇编指令,不进入函数
    finish执行直到函数结束
    where给出当前源代码行/所在函数
    kill杀掉正在执行中的程序
    quit, q退出GDB

    shell命令

    命令说明
    cd directory切换工作路径至directory
    pwd显示当前工作路径
    make args调用make
    shell cmd执行shell命令cmd


    3. 断点/监视点/栈操作和变量相关

    变量(variable)相关

    命令说明
    print [file:]var
    p [file:]var
    输出(指定文件中)变量var的值
    print *arr@len输出数组arr的前len个成员
    p/format var以指定格式输出变量var的值。
    x:16进制数值;d:有符号整数; u:无符号整数;
    o:八进制数值; [t|b]:二进制数值; c:字符;
    f:浮点数; a:16进制地址;...
    x/w addr以二进制方式输出指定地址addr处的4字节
    print var=value改变变量var的值为value

     

    断点和监视点(breakpoint, watchpoint)

    命令说明
    break [file:][line|func]
    b [file:][line|func]
    在(文件file)第line行/函数func处设置断点
    break (+|-)offset在程序当前运行处后/前offset行设置断点
    break *addr在地址addr处设置断点
    break在下一指令处设置断点
    break position if condition当表达式condition为真时在position处暂停程序
    cond n [expr]在断点n处设置新的暂停条件expr; 如expr为空则清除断点处条件
    tbreak ...临时断点。一旦程序运行停于此处,则禁止断点
    rbreak regex在所有匹配正则表达式regex的函数处设置断点
    break line thread thid在线程thid中line行设定断点
    info break显示已定义的所有断点
    clear [file:][func|line]删除指定处断点;如未指定断点位置,则清除下一条指令处断点
    delete n_or_range
    d n_or_range
    删除断点n或指定范围range中的断点
    enable n_or_range允许断点n或指定范围range内断点
    enable once n允许断点n,仅生效一次
    disable n_or_range使断点n失效
    ignore n count指定忽略断点n的次数(count)
    catch event捕获到指定的event后暂停程序运行,event可以是catch,throw,exec,fork,vfork,load,unload等
    watch expr为表达式expr设置观察点,当expr值发生变化时,挂起进程

    栈(stack)相关

    命令说明
    backtrace [n]
    bt [n]
    打印栈中的所有frame;或最内层n(n>0)帧/最外层n(n<0)帧
    frame [n]选择第n帧/地址为n的帧,未指定n则显示当前帧
    up n向上选择n帧
    down n向下选择n帧