GDB笔记

GDB环境

show

  显示调试器相关信息的通用命令

info

  显示被调试程序相关信息的通用命令,不可单独做命令,必须后跟info命令的名字

set

  修改gdb环境变量

cd

  同shell

pwd

  打印当前工作目录

shell

  执行后跟的Unix命令

make

  重新build源代码

run

  运行程序

path

  设置程序的运行路径

showpaths

  打印程序的所有运行路径

directory(dir)

  添加或清除源文件搜索路径

showdirectories

  打印所有的源文件搜索路径

setenvironment

  设置环境变量。如:set envUSER=hchen

showenvironment

  打印环境变量。

inforegisters

  查看所有(不包括浮点寄存器)或指定寄存器的信息

infoall-registers

  查看寄存器信息(包括浮点寄存器)

    gdb提供了四个标准寄存器的全局变量:

      $pc:程序计数器

      $fp:当前调用栈指针

      $sp:栈指针

      $ps:处理器状态

@

  数组

    <自然数1>@<自然数2>:指定起始地址为“自然数1”,长度为“自然数2”的数组

::

  域操作符

    <字符串1>::<字符串2>:指定文件名(带后缀名)或函数名为“字符串1”,变量名为“字符串2”的域变量

$

  GDB全局变量

    $<字符串>:指定环境变量

showconvenience

  查看所有的全局变量

/

  输出格式:

      /x:按十六进制格式显示变量

      /d:按十进制格式显示变量

      /u:按无符号十进制格式显示变量

      /o:按八进制格式显示变量

      /t:按二进制格式显示变量

      /a:按地址格式显示变量

      /c:按字符格式显示变量

      /f:按浮点数格式显示变量

      /s:按字符串格式显示变量

      /i:按指令格式显示变量

 

 

设置断点

break(b)←→clear

  设置断点

    ~<自然数>:设置当前文件指定行为断点

    ~ <+自然数>:设置当前行的后N行为断点

    ~ <-自然数>:设置当前行的前N行为断点

    ~<字符串>:设置指定函数入口作为断点

    ~*<自然数>:设置指定内存地址处为断点

    ~<…> if <表达式>:如果表达式为真,则设置断点

    ~<…> thread <自然数> [if <表达式>]:如果在指定线程,则设置断点

infobreak(info breakpoints)

   显示被调试程序相关信息的通用命令,不可单独做命令,必须后跟info命令的名字

    ~ [<自然数>]:打印所有断点或指定断点信息

enable←→disable

  应用断点

    ~ [<数字>[-<数字>]]:应用数字作为索引指定的断点

    ~breakpoint [<数字>[-<数字>]]:应用所有或指定索引范围的断点

    ~delete:

    ~display:

    ~mem:

    ~once:

    ~tracepoints:

delete(deletebreakpoint)

  删除断点

     ~ [<数字>[-<数字>]]:删除所有或指定索引范围断点

condition

    ~ <自然数> [<表达式>]:修改或清除指定断点的停止条件

commands

  设置停止点的运行命令

    ~[<自然数>]\n[<代码列表>]\nend:为指定断点或最后设置的断点设置或清除运行命令

display

  当程序暂停时自动显示指定的表达式

    ~/<输出格式> 表达式:

  Note:

    display/i$pc:显示当前执行的机器码

undisplay

deletedisplay

enabledisplay

disabledisplay

infodisplay

 

设置观察点

watch <表达式>

  表达式的值发生变化时停住程序

rwatch <表达式>

  表达式被读时停住程序

awatch <表达式>

  表达式被读或被写时停住程序

info watchpoints

  列出当前所设置的所有观察点

 

 

设置捕捉点

catch

  当event发生时停住程序

tcatch

  只设置一次捕捉点,当程序停住以后,该点被自动删除。

 

调试

next

  step over,逐过程单步运行

step

  step into,逐语句单步运行

finish

  step out,运行直至当前调用栈返回

until(u)

  运行直至当前循环结束

nexti(ni)

  单步跟踪机器指令

stepi(si)

  单步跟踪机器指令

continue(c|fg)

  恢复程序运行

    ~<自然数>:恢复程序运行并忽略指定数目的断点

 

以下函数将改变程序的执行

jump

  跳转至指定行或地址继续运行

return

  取消当前函数的执行,并立即返回;如果指定了参数,那么该表达式的值会被认作函数的返回值

call

  调用表达式指定的函数

set(setvariable)

  赋值命令

signal

  恢复程序运行,并传送给程序一个信号,用以测试程序的信号处理函数

handle

  指定如何处理信号

infosignals(info handle)

  查看信号相关信息

 

查看栈信息

backtrace(bt)

  打印出调用栈信息

    ~<自然数>:打印里N层调用栈信息

    ~-<自然数>:打印外N层调用栈信息

    ~full:打印所有局部变量的值

frame

  选中当前栈(无参数)或指定栈(有参数)并显示其信息

select-frame

  选中当前栈(无参数)或指定栈(有参数)

down←→up

  选中被当前栈调用的栈并显示其信息

down-silently←→up-silently

  选中被当前栈调用的栈

infoframe

  显示当前栈的相关信息

infoargs

  打印当前函数的参数列表

infolocals

  打印当前函数的局部变量列表

x/

  查看内存

    x/<输出格式> <自然数>:显示由指定地址的内存数据

print(p)

  打印表达式的值

    ~/<输出格式> 表达式:       

infoline

  打印源代码在内存中的地址

disassemble

  打印指定函数的机器指令

 

查看源代码

list(l)

  源代码清单

    ~<数字>:列出当前文件“数字”作为行号指定行的源代码

    ~<字符串>:列出“字符串”作为函数名指定函数的源代码

    ~*<数字>:列出包含“数字”作为地址指定位置的源代码

    ~<字符串>:<数字>:列出“字符串”作为文件名指定文件,“数字”作为行号指定行的源代码

    ~<字符串1>:<字符串2>:列出“字符串1”作为文件名指定文件,“字符串2”作为函数名指定函数的源代码

setlistsize

  设置一次显示源代码的行数

showlistsize

  打印一次显示源代码的行数

search(forward-search)

  从最后被列出的源代码行开始向后搜索正则表达式

reverse-search

  从最后被列出的源代码行开始向前搜索正则表达式

whatis

  打印表达式的数据类型

ptype

  打印数据类型的定义

showlanguage

  显示当前的编程语言

setlanguage

  设置当前的编程语言

infosource

  显示当前源文件的信息

posted on 2010-10-28 15:09  爱吃草莓的维尼  阅读(1248)  评论(0编辑  收藏  举报

导航