gdb MI命令中文

合集下载

GDB常用命令

GDB常用命令

GDB常用命令在linux的c编程中大家经常用gdb调试程序,以下是一些常用的指令1.break FUNCTION在某个函数上设置断点。

函数重载时,有可能同时在几个重载的函数上设置了断点break +OFFSETbreak -OFFSET在当前程序运行到的前几行或后几行设置断点break LINENUM在行号为LINENUM的行上设置断点break FILENAME:LINENUM在文件名为FILENAME的原文件的第LINENUM行设置断点break FILENAME:FUNCTION在文件名为FILENAME的FUNCTION函数上设置断点当你的多个文件中可能含有相同的函数名时必须给出文件名。

break *ADDRESS在地址ADDRESS上设置断点,这个命令允许你在没有调试信息的程序中设置断点break当break命令不包含任何参数时,break命令在当前执行到的程序运行栈中的下一条指令上设置一个断点。

除了栈底以外,这个命令使程序在一旦从当前函数返回时停止。

相似的命令是finish,但finish并不设置断点。

这一点在循环语句中很有用。

gdb在恢复执行时,至少执行一条指令。

break ... if COND这个命令设置一个条件断点,条件由COND指定;在gdb每次执行到此断点时COND都被计算当COND的值为非零时,程序在断点处停止ignore BNUM COUNT设置第BNUM号断点的被忽略的次数为COUNT,即断点BNUM 再执行到第COUNT+1次时程序停止tbreak ARGS 或者简写为 tb设置断点为只有效一次。

ARGS的使用同break中的参量的使用hbreak ARGS设置一个由硬件支持的断点。

这个命令的主要目的是用于对EPROM/ROM程序的调试因为这条命令可以在不改变代码的情况下设置断点。

这可以同SPARCLite DSU一起使用。

当程序访问某些变量和代码时,DSU将设置“陷井”。

GDB命令大全

GDB命令大全

GDB命令大全GDB的使用当程序出错并产生core 时快速定位出错函数的办法gdb 程序名 core文件名(一般是core,也可能是core.xxxx) 调试程序使用的键r run 运行.程序还没有运行前使用c cuntinue 继续运行。

运行中断后继续运行q 退出kill 终止调试的程序h help 帮助<tab> 命令补全功能step 跟入函数next 不跟入函数b breakpoint 设置断点。

用法:b 函数名对此函数进行中断b 文件名:行号对此文件中指定行中断.如果是当前文件,那么文件名与:号可以省略看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.l list 列出代码行。

一次列10 行。

连接使用list将会滚动显示. 也可以在list 后面跟上文件名:行号watch 观察一个变量的值。

每次中断时都会显示这个变量的值p print 打印一个变量的值。

与watch不同的是print只显示一次这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,这时候你会看到 b 的 value, 也就是上面的 $1 = 15.你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,这时候你会发现, b 的 value 就变成 100 了:$1 = 100.网上抄录基本的使用方法简介前言程序代码中的错误可分为数类,除了最容易除错的语法错误,编译程序会告诉你错误所在外,大部分的错误都可以归类为执行时错误。

GDB 的功能便是寻找执行时错误。

如果没有除错程序,我们只能在程序中加入输出变量值的指令来了解程序执行的状态。

有了 GDB 除错程序,我们可以设定在任何地方停止程序的执行,然后可以随意检视变量值及更动变量,并逐行执行程序。

一个除错程序执行的流程通常是这样的:1. 进入除错程序并指定可执行文件。

gdb命令大全

gdb命令大全

gdb命令大全gdb 命令大全2011-06-22 21:44 155人阅读评论(0) 收藏举报gdb 命令1.按TAB键两次会将命令或者函数名补齐2.设置断点break functionbreak linenumbreak +offset 当前行号前offset行break -offset 当前行号后offset行break *address 运行内存地址处停止break 下一行break ... if condition ... 可以是上述参数3.设置观察点watch expr 变量有变化停止rwatch expr 变量被读停止awatch expr 变量被读写时停止4.设置捕捉点catch eventevent有如下:throw catch exec fork vfork load unloadCODE:Raised signals may be caught:catch signal - all signalscatch signal <signame> - a particular signalRaised exceptions may be caught:catch throw - all exceptions, when throwncatch throw <exceptname> - a particular exception, when throwncatch catch - all exceptions, when caughtcatch catch <exceptname> - a particular exception, when caughtThread or process events may be caught:catch thread_start - any threads, just after creation catch thread_exit - any threads, just before expirationcatch thread_join - any threads, just after joinsProcess events may be caught:catch start - any processes, just after creationcatch exit - any processes, just before expirationcatch fork - calls to fork()catch vfork - calls to vfork()catch exec - calls to exec()Dynamically-linked library events may be caught:catch load - loads of any librarycatch load <libname> - loads of a particular librarycatch unload - unloads of any librarycatch unload <libname> - unloads of a particular library The act of your program's execution stopping may also be caught:catch stopC++ exceptions may be caught:catch throw - all exceptions, when throwncatch catch - all exceptions, when caught4.停止条件维护可以用condition命令来修改断点的条件,目前只有break watchcondition <bnum> <expression>condition <bnum> 清除停止条件5.为停止点设定运行命令可以用commands命令来设置commands <bnum>.....end6.其他有用的指令finish 运行程序,直到当前函数完成until或u运行程序直到退出循环体,用在for或者while上,比较方便x命令增加如下CODE:Examine memory: x/FMT ADDRESS.ADDRESS is an expression for the memory address to examine.FMT is a repeat count followed by a format letter and a size letter.Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary), f(float), a(address), i(instruction), c(char) and s(string).Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).The specified number of objects of the specified size are printedaccording to the format.Defaults for format and size letters are those previously used.Default count is 1. Default address is following last thingwith this command or "print".====================================== ====================gdb 命令大全1. 启动gdb 应用程序名gdb 应用程序名 core文件名gdb 应用程序名 pidgdb --args 应用程序名应用程序的运行参数帮助:help 显示帮助info 显示程序状态set 修改show 显示gdb状态运行及运行环境设置:set args # 设置运行参数show args # 显示运行参数set env 变量名 = 值 # 设置环境变量unset env [变量名] # 取消环境变量show env [变量名] # 显示环境变量path 目录名 # 把目录添加到查找路径中show paths # 显示当前查找路径cd 目录 # 切换工作目录pwd # 显示当前工作目录tty /dev/pts/1 # 修改程序的输入输出到指定的ttyset inferior-tty /dev/pts/1 # 修改程序的输出到指定的ttyshow inferior-ttyshow ttyrun 参数 # 运行start 参数 # 开始运行,但是会在main函数停止attach piddetachkill # 退出Ctrl-C # 中断(SIGINT)Ctrl-]线程操作:info threads # 查看所有线程信息thread 线程id # 切换到指定线程thread apply [threadno | all ] 参数 # 对所有线程都应用某个命令子进程调试:set follow-fork-mode child|parent # fork后,需要跟踪谁show follow-fork-modeset detach-on-flow on|off # fork后,需要两个都跟踪吗info forks # 显示所有进程信息fork 进程id # 切换到某个进程detach-fork 进程id # 不再跟踪某个进程delete fork 进程id # kill某个进程并停止对它的跟踪检查点: checkpoint/restart查看停止原因:info program断点(breakpoint): 程序运行到某处就会中断break(b) 行号|函数名|程序地址 | +/-offset | filenam:func [if条件] # 在指定位置设置断点tbreak ... # 与break相似,只是设置一次断点hbreak ... # 与break相似,只是设置硬件断点,需要硬件支持thbreak ... # 与break相似,只是设置一次性硬件断点,需要硬件支持rbreak 正则表达式 # 给一批满足条件的函数打上断点info break [断点号] # 查看某个断点或所有断点信息set breadpoint pending auto|on|off # 查看如果断点位置没有找到时行为show breakpoint pending观察点(watchpoint): 表达式的值修改时会被中断watch 表达式 # 当表达式被写入,并且值被改变时中断rwatch 表达式 # 当表达式被读时中断awatch 表达式 # 当表达式被读或写时中断info watchpointsset can-use-hw-watchpoints 值 # 设置使用的硬件观察点的数show can-use-hw-watchpointsrwatch与awatch需要有硬件支持,另外如果是对局部变量使用watchpoint,那退出作用域时观察点会自动被删除另外在多线程情况下,gdb的watchpoint只对一个线程有效捕获点(catchpoint): 程序发生某个事件时停止,如产生异常时catch 事件名事件包括:throw # 产生c++异常catch # 捕获到c++异常exec/fork/vfork # 一个exec/fork/vfork函数调用,只对HP-UX load/unload [库名] # 加载/卸载共享库事件,对只HP-UXtcatch 事件名 # 一次性catchinfo break断点操作:clear [函数名|行号] # 删除断点,无参数表示删卫当前位置delete [断点号] # 删除断点,无参数表示删所有断点disable [断点号]enable [断点号]condition 断点号条件 # 增加断点条件condition 断点号 # 删除断点条件ignore 断点号数目 # 忽略断点n次commands 断点号 # 当某个断点中断时打印条件条件end下面是一个例子,可以一直打印当前的X值:commands 3printf "X:%d/n",xcontend断点后操作:continue(c) [忽略次数] # 继续执行,[忽略前面n次中断]fg [忽略次数] # 继续执行,[忽略前面n次中断]step(s) [n步] # 步进,重复n次next(n) [n步] # 前进,重复n次finish # 完成当前函数调用,一直执行到返回处,并打印返回值until(u) [位置] # 一直执行到当前行或指定位置,或是当前函数返回advance 位置# 前面到指定位置,如果当前函数返回则停止,与until类似stepi(si) [n步] # 精确的只执行一个汇编指令,重复n次nexti(ni) [n步] # 精确的只执行一个汇编指令,碰到函数跳过,重复n次set step-mode on|off # on时,如果函数没有调试信息也跟进show step-mode信号:info signals # 列出所有信号的处理方式info handle # 同上handle 信号方式 # 改变当前处理某个信号的方式方式包括:nostop # 当信号发生时不停止,只打印信号曾经发生过stop # 停止并打印信号print # 信号发生时打印noprint # 信号发生时不打印pass/noignore # gdb充许应用程序看到这个信号nopass/ignore # gdb不充许应用程序看到这个信号线程断点:break 行号信息 thread 线程号 [if 条件] # 只在某个线程内加断点线程调度锁:set scheduler-locking on|off # off时所有线程都可以得到调度,on时只有当前show scheduler-locking帧:frame(f) [帧号] # 不带参数时显示所有帧信息,带参数时切换到指定帧frame 地址 # 切换到指定地址的帧up [n] # 向上n帧down [n] # 向下n帧select-frame 帧号 # 切换到指定帧并且不打印被转换到的帧的信息up-silently [n] # 向上n帧,不显示帧信息down-silently [n] # 向下n帧,不显示帧信息调用链:backtrace(bt) [n|-n|full] # 显示当前调用链,n限制显示的数目,-n表示显示后n个,n表示显示前n个,full的话还会显示变量信息使用 thread apply all bt 就可以显示所有线程的调用信息set backtrace past-main on|offshow backtrace past-mainset backtrace past-entry on|offshow backtrace past-entryset backtrace limit n # 限制调用信息的显示层数show backtrace limit显示帧信息:info frame # 显示当前帧信息info frame addr # 显示指定地址的帧信息info args # 显示帧的参数info locals # 显示局部变量信息info catch # 显示本帧异常信息显示行号:list(l) [行号|函数|文件:行号] # 显示指定位置的信息,无参数为当前位置list - # 显示当前行之前的信息list first,last # 从frist显示到last行list ,last # 从当前行显示到last行list frist, # 从指定行显示list + # 显示上次list后显示的内容list - # 显示上次list前面的内容在上面,first和last可以是下面类型:行号+偏移-偏移文件名:行号函数名函数名:行号set listsize n # 修改每次显示的行数show listsize编辑:edit [行号|函数|函数名:行号|文件名:函数名] # 编辑指定位置查找:search 表示式 # 向前查找表达式reverse-search 表示式 # 向后查找表达式指定源码目录:directory(dir) [目录名] # 指定源文件查找目录show directories源码与机器码:info line [函数名|行号] # 显示指定位置对应的机器码地址范围disassemble [函数名 | 起始地址结束地址] # 对指定范围进行反汇编set disassembly-flavor att|intel # 指定汇编代码形式show disassembly-flavor查看数据:ptype 表达式 # 查看某个表达式的类型print [/f] [表达式] # 按格式查看表达式内容,/f是格式化set print address on|off # 打印时是不是显示地址信息show print addressset print symbol-filename on|off # 是不是显示符号所在文件等信息show print symbol-filenameset print array on | off # 是不是打印数组show print arrayset print array index on | off # 是不是打印下标show print array index...表达式可以用下面的修饰符:var@n # 表示把var当成长度为n的数组filename::var # 表示打印某个函数内的变量,filename可以换成其它范围符如文件名{type} var # 表示把var当成type类型输出格式:x # 16进制d # 10进制u # 无符号o # 8进制t # 2进制a # 地址c # 字符f # 浮点查看内存:x /nfu 地址 # 查看内存n 重复n次f 显示格式,为print使用的格式u 每个单元的大小,为b byteh 2 bytew 4 byteg 8 byte自动显示:display [/fmt] 表达式 # 每次停止时都会显示表达式,fmt与print 的格式一样,如果是内存地址,那fmt可像 x的参数一样undisplay 显示编号delete display 显示编号 # 这两个都是删附某个显示disable display 显示编号 # 禁止某个显示enable display 显示编号 # 重显示display # 显示当前显示内容info display # 查看所有display项查看变量历史:show values 变量名 [n] # 显示变量的上次显示历史,显示n条show values 变量名 + # 继续上次显示内容便利变量: (声明变量的别名以方便使用)set $foo = *object_ptr # 声明foo为object_ptr的便利变量init-if-undefined $var = expression # 如果var还未定义则赋值show convenience内部便利变量:$_ 上次x查看的地址$__$_exitcode 程序垢退出码寄存器:into registers # 除了浮点寄存器外所有寄存器info all-registers # 所有寄存器into registers 寄存器名 # 指定寄存器内容info float # 查看浮点寄存器状态info vector # 查看向量寄存器状态gdb为一些内部寄存器定义了名字,如$pc(指令),$sp(栈指针),$fp(栈帧),$ps(程序状态)p /x $pc # 查看pc寄存器当前值x /i $pc # 查看要执行的下一条指令set $sp += 4 # 移动栈指针内核中信息:info udot # 查看内核中user struct信息info auxv # 显示auxv内容(auxv是协助程序启动的环境变量的)内存区域限制:mem 起始地址结构地址属性# 对[地始地址,结构地址)区域内存进行保护,如果结构地址为0表示地址最大值0xffffffff delete mem 编号 # 删除一个内存保护disable mem 编号 # 禁止一个内存保护enable mem 编号 # 打开一个内存保护info mem # 显示所有内存保护信息保护的属性包括:1. 内存访问模式: ro | wo |rw2. 内存访问大小: 8 | 16 | 32 | 64 如果不限制,表示可按任意大小访问3. 数据缓存: cache | nocache cache表示充许gdb缓存目标内存内存复制到/从文件:dump [格式] memory 文件名起始地址结构地址 # 把指定内存段写到文件dump [格式] value 文件名表达式 # 把指定值写到文件格式包括:binary 原始二进制格式ihex intel 16进制格式srec S-recored格式tekhex tektronix 16进制格式append [binary] memory 文件名起始地址结构地址 # 按2进制追加到文件append [binary] value 文件名表达式 # 按2进制追加到文件restore 文件名 [binary] bias 起始地址结构地址 # 恢复文件中内容到内存.如果文件内容是原始二进制,需要指定binary参数,不然会gdb自动识别文件格式产生core dump文件gcore [文件名] # 产生core dump文件字符集:set target-charset 字符集# 声明目标机器的locale,如gdbserver所在机器set host-charset 字符集 # 声明本机的localeset charset 字符集 # 声明目标机和本机的localeshow charsetshow host-charsetshow target-charset缓存远程目标的数据:为提高性能可以使用数据缓存,不过gdb不知道volatile变量,缓存可能会显示不正确的结构set remotecache on | offshow remotecacheinfo dcache # 显示数据缓存的性能C预处理宏:macro expand(exp) 表达式 # 显示宏展开结果macro expand-once(expl) 表达式 # 显示宏一次展开结果macro info 宏名 # 查看宏定义追踪(tracepoint): 就是在某个点设置采样信息,每次经过这个点时只执行已经定义的采样动作但并不停止,最后再根据采样结果进行分析。

gdb使用教程

gdb使用教程

gdb使用教程GDB是GNU调试器的缩写,是一个功能强大的命令行调试工具,用于帮助开发人员在调试过程中定位和修复程序中的错误。

以下是GDB的使用教程:1. 编译程序时添加调试信息:在使用GDB进行调试之前,需要确保程序在编译时包含了调试信息。

可以通过在编译命令中添加`-g`选项来实现。

例如:`gcc -g main.c -o main`。

2. 启动GDB:在命令行中输入`gdb`命令,然后输入可执行文件的路径作为参数。

例如:`gdb ./main`。

3. 设置断点:断点是在程序执行到指定位置时停下来的标记。

可以使用`break`命令来设置断点。

例如:`break main`可以在`main`函数的开头设置一个断点。

4. 开始执行程序:使用`run`命令来运行程序。

例如:`run`。

5. 执行程序并停在断点处:当程序开始运行后,会在达到断点处停下来等待输入。

此时可以使用一些GDB命令来检查程序的状态,如查看变量的值、栈帧等。

6. 单步执行:使用`next`命令来逐行执行程序。

例如:`next`。

7. 跳出函数:使用`finish`命令可以跳出当前正在执行的函数,并停在调用该函数的上一个函数中。

8. 继续执行:使用`continue`命令可以接着执行程序直到下一个断点或程序结束。

9. 查看变量的值:使用`print`或简写的`p`命令可以查看变量的值。

例如:`print i`可以查看变量`i`的值。

10. 修改变量的值:使用`set`命令可以修改变量的值。

例如:`set i = 10`可以将变量`i`的值修改为10。

11. 查看函数调用栈:使用`backtrace`或简写的`bt`命令可以查看函数调用栈。

12. 退出GDB:使用`quit`命令可以退出GDB。

以上是一些常用的GDB命令,使用GDB进行调试时还有很多其他的功能和命令可以使用,可以通过阅读GDB的文档来更详细地了解。

gdb 汇编常见命令

gdb 汇编常见命令

gdb 汇编常见命令1.引言1.1 概述概述部分的内容可以简要介绍一下gdb和汇编语言的概念。

GDB是GNU Debugger的缩写,是一个功能强大的调试工具,用于帮助开发人员调试程序。

它可以与众多编程语言一起使用,包括汇编语言。

汇编语言是一种低级别的程序设计语言,用于直接操作计算机硬件。

本文将重点介绍gdb在汇编语言中的常见命令。

通过熟悉这些命令,开发人员可以更好地理解和调试汇编程序,提高程序的运行效率和稳定性。

文章后续部分将详细介绍常见的gdb命令和它们在汇编程序中的应用场景。

首先,我们将介绍常见命令1,在此命令中,我们将学习如何设置断点、单步执行程序、查看寄存器的值等。

然后,我们将进一步探讨常见命令2,该命令将介绍如何查看内存中的数据、修改内存值以及使用条件断点等。

通过本文,读者将能够掌握这些常见的gdb命令,并能够熟练运用它们进行汇编程序的调试。

最后,在结论部分,我们将对本文进行总结,并展望未来gdb在汇编语言调试中的应用前景。

接下来,我们将详细介绍2.1 常见命令1部分的内容。

1.2 文章结构文章结构部分的内容可以参考以下内容:文章结构部分介绍了整篇文章的组织结构和内容安排,旨在为读者提供一个清晰的框架和导引,使读者能够更好地理解和掌握文章内容。

在本文中,结构主要分为三个部分:引言、正文和结论。

引言部分首先对文章的主题进行了概述,简要介绍了gdb汇编调试工具的基本概念和作用。

接着,介绍了本文的结构,包括引言、正文和结论三个部分以及各个部分的内容安排。

最后,明确了本文的目的,旨在帮助读者掌握gdb汇编调试工具的常见命令。

正文部分是本文的核心内容,主要介绍了gdb汇编调试工具的常见命令。

这些命令包括但不限于断点设置、步进执行、变量查看、寄存器查看等。

每个命令都会详细解释其作用和用法,并通过实例进行演示,以便读者能够更好地理解和掌握。

结论部分对整篇文章进行总结,并展望了未来可能的研究方向和进一步探索的问题。

GDB命令

GDB命令

GDB的命令很多,先介绍一些最常用的。

在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能。

它就如同Linux下SHELL中的命令补齐一样。

当你输入一个命令的前几个字符,然后输入TAB键,如果没有其它命令的前几个字符与此相同,SHELL将补齐此命令。

如果有其它命令的前几个字符与此相同,你会听到一声警告声,再输入TAB键,SHELL将所有前几个字符与此相同的命令全部列出。

而GDB中的补齐功能不仅能补齐GDB命令,而且能补齐参数。

先介绍常用的命令,然后结合一个具体的例子来演示如何实际使用这些命令。

下面的所有命令除了第一条启动GDB命令是在SHELL下输入的,其余都是GDB内的命令。

大部分GDB内的命令都可以仅输入前几个字符,只要不与其它指令冲突。

如quit可以简写为q,因为以q打头的命令只有quit。

List可以简写为l,等等。

1.启动GDB你可以输入GDB来启动GDB程序。

GDB程序有许多参数,在此没有必要详细介绍,但一个最为常用的还是要介绍的:如果你已经编译好一个程序,我们假设文件名为hello,你想用GDB调试它,可以输入gdb hello来启动GDB并载入你的程序。

如果你仅仅启动了GDB,你必须在启动后,在GDB中再载入你的程序。

2.载入程序=== file在GDB内,载入程序很简单,使用file命令。

如file hello。

当然,程序的路径名要正确。

退出GDB === quit在GDB的命令方式下,输入quit,你就可以退出GDB。

你也可以输入'C-d'来退出GDB。

3.运行程序=== run当你在GDB中已将要调试的程序载入后,你可以用run命令来执行。

如果你的程序需要参数,你可以在run指令后接着输入参数,就象你在SHELL下执行一个需要参数的命令一样。

4.查看程序信息=== infoinfo指令用来查看程序的信息,当你用help info查看帮助的话,info指令的参数足足占了两个屏幕,它的参数非常多,但大部分不常用。

GDB MI 命令介绍

GDB MI 命令介绍

GDB MI 命令介绍libgdb过时了,目前的GDB调试前端都不用libgdb目前有两种比较流行:- MI接口,现在应该是MI II接口,是Eclipse CDT所采用的方式- emac输出接口,这个似乎有更多的调试前端所采用,例如DDD,kdbg,codeblocks等等另外还有一种比较另类的一种方式:insight,直接把gdb给包含进去了=========================================GDB MI Interface虽然使用GDB已经很多年了,但是直到最近因为工作需要才知道GDB除了CLI(Commnad LineInterface)命令外,还有一个更重要的MI (Machine Interface)命令。

之所以“更重要”,因为MI不但包括了CLI 的所有命令,还具备一些CLI所不提供的功能。

当然,MI 接口的设计初衷是面向将GDB作为系统组件之一的复杂系统。

在类似于DDD,Insight 等以GDB为backend的GUIdebugger的实现中,就是充分利用了GDBMI接口。

MI最大的不足在于其输出比较复杂,必须很熟悉其输出格式才能理解,不如CLI输出直观。

但这只是习惯问题,多用多读自然就OK啦。

简单地说,GDB MI interpreter接受字符串形式的命令输入,然后产生一行表示命令执行结果的输出。

当然,这里的输入命令和输出记录都有严格的格式和内容定义。

而且,根据命令的不同(同步命令或异步命令),GDB的输出也代表不同的含义。

当利用GDBMI实现一个GUI的debugger时,通常的做法是使用一个进程负责管理GDB,将GDB作为其子进程派生出来后,接管其标准I/O,并通过pipe向GDB注入MI命令,并接收GDB MI输出。

自然,该进程的另一个工作就是与GUI前端交互,完成GUI命令解析以及返回相应record.Insight使用Tcl/tk实现前端GUI,DDD使用的则是Gtk。

gdb 带命令行选项的参数

gdb 带命令行选项的参数

gdb 带命令行选项的参数详解GDB(GNU Debugger)是一个用于调试程序的强大工具,它允许你在程序执行过程中观察程序的状态、检查变量的值,以及定位和修复错误。

你可以在命令行中使用一些选项来配置GDB 的行为。

以下是一些常见的GDB 命令行选项:1. 指定要调试的程序:```gdb [program]```这是最基本的用法,`program` 是你要调试的可执行文件的名称。

2. 指定核心转储文件:```gdb [program] core```如果程序崩溃并生成了核心转储文件,你可以使用该选项来调试核心转储文件。

3. 加载符号文件:```gdb [program] -s [symbol-file]```使用`-s` 选项可以指定符号文件,这对于调试没有调试信息的二进制文件很有用。

4. 指定启动参数:```gdb --args [program] [args...]```使用`--args` 选项可以将参数传递给正在调试的程序。

5. 使用批处理模式:```gdb -batch -ex "command1" -ex "command2" [program]````-batch` 选项可以使GDB 在执行完指定命令后立即退出。

`-ex` 选项用于指定在启动GDB 后要执行的命令。

6. 使用交互式Shell:```gdb -i=mi [program]````-i=mi` 选项启用了GDB 的机器接口模式,这对于与其他程序(如IDE)进行集成很有用。

7. 设置断点:```gdb -ex "break [function]" [program]```使用`-ex` 选项可以在启动时设置断点。

8. 设置环境变量:```gdb [program] --eval-command="set environment VARNAME=VALUE"```使用`--eval-command` 选项可以在启动时设置GDB 命令。

命令行中的gdb用法

命令行中的gdb用法

命令行中的gdb用法在命令行中使用GDB(GNU调试器)调试程序可以帮助你理解程序的执行过程,查找和修复错误。

下面是一些常用的GDB命令:1. **启动GDB:**```bashgdb your_program```2. **设置断点:**设置断点可以让程序在特定位置停止执行,以便你可以查看或修改变量的值。

例如,在函数`foo`的开始处设置断点:```gdbbreak foo```或者在特定行设置断点:```gdbbreak your_program.c:23```3. **运行程序:**在GDB中,你可以使用`run`命令来启动你的程序。

你也可以使用`start`命令从程序的开始处运行。

4. **查看变量的值:**在GDB中,你可以使用`print`命令来查看变量的值。

例如,如果你有一个整数变量`x`,你可以使用以下命令查看它的值:```gdbprint x```5. **步进:**使用`next`命令可以执行下一行代码。

如果你想进入一个函数,可以使用`step`命令。

6. **继续执行:**使用`continue`命令可以继续执行程序,直到遇到下一个断点或程序结束。

7. **查看堆栈:**使用`backtrace`命令可以查看当前堆栈的调用情况。

8. **设置条件断点:**你可以设置条件断点,以便在满足特定条件时停止程序。

例如,以下命令将在变量`x`等于5时停止程序:```gdbbreak x=5```9. **列出源代码:**使用`list`命令可以显示当前执行的代码。

你可以使用`list your_function`来查看特定函数的源代码。

10. **查看和修改变量的值:**使用`set`命令可以修改变量的值。

例如,以下命令将变量`x`的值设置为10:```gdbset x=10```11. **退出GDB:**使用`quit`或`exit`命令可以退出GDB。

如果你想在不保存更改的情况下退出,可以使用`q`或`x`。

gdb常用命令详解

gdb常用命令详解

一、显示源代码GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。

不然就看不到源程序了。

当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。

你可以用list命令来打印程序的源代码。

还是来看一看查看源代码的GDB命令吧。

list显示程序第linenum行的周围的源程序。

list显示函数名为function的函数的源程序。

list显示当前行后面的源程序。

list -显示当前行前面的源程序。

一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。

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

show listsize查看当前listsize的设置。

list命令还有下面的用法:list ,显示从first行到last行之间的源代码。

list ,显示从当前行到last行之间的源代码。

list +往后显示源代码。

一般来说在list后面可以跟以下这们的参数:行号。

<+offset> 当前行号的正偏移量。

<-offset> 当前行号的负偏移量。

哪个文件的哪一行。

函数名。

哪个文件中的哪个函数。

<*address> 程序运行时的语句在内存中的地址。

二、搜索源代码不仅如此,GDB还提供了源代码搜索的命令:forward-searchsearch向前面搜索。

reverse-search全部搜索。

其中,就是正则表达式,也主一个字符串的匹配模式,关于正则表达式,我就不在这里讲了,还请各位查看相关资料。

三、指定源文件的路径某些时候,用-g编译过后的执行程序中只是包括了源文件的名字,没有路径名。

GDB提供了可以让你指定源文件的路径的命令,以便GDB进行搜索。

directorydir加一个源文件路径到当前路径的前面。

如果你要指定多个路径,UNIX下你可以使用“:”,Windows下你可以使用“;”。

GDB基本命令(整合)

GDB基本命令(整合)

GDB基本命令(整合)一、gdb调试基本知识a.调试器指示的是将要执行的代码行b.只有在编译时拥有调试符号(-g)的程序才能在调试时看到源码c.同一行上有多个断点时,gdb仅中断在断点号最小的那个断点上d.断点可以设置在同一程序的不同文件中e.在任何给定时间,gdb只有一个焦点,即当前“活动”的文件f.源文件改变后,断点发生移动,带式断点属性的行号不变二、GDB基本命令清单查询在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:* aliases:命令别名* breakpoints:断点定义;* data:数据查看;* files:指定并查看文件;* internals:维护命令;* running:程序执行;* stack:调用栈查看;* statu:状态查看;* tracepoints:跟踪程序执行。

键入 help 后跟命令的分类名(如help aliases),可获得该类命令的详细清单。

三、GDB基本命令用法1、运行退出run(简写r):执行程序(gdb)run app [argv1] [argv2] ...run命令后可跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。

如果使用不带参数的run命令,gdb就再次使用前一条run命令的参数。

set args:设定传递给程序的参数(gdb)set args [argv1] [argv2] ...show args:查看其缺省参数的列表(gdb)show argskill(简写k):异常终止在gdb 控制下运行的程序(gdb)killquit(简写q):退出gdb(gdb)quit2、查看信息list(简写l):查看源码(gdb) list line_num或l line_num,line_num为行号。

pirnt(简写p):print var:查看变量var的值。

(gdb) print var可以通过添加参数来设置输出格式:/x 按十六进制格式显示变量/d 按十进制格式显示变量/u 按十六进制格式显示无符号整型/o 按八进制格式显示变量/t 按二进制格式显示变量/a 按十六进制格式显示变量/c 按字符格式显示变量/f 按浮点数格式显示变量例如:print /x varprint可以显示被调试的语言中任何有效的表达式。

GDB使用手册(中文版)

GDB使用手册(中文版)

GDB 4.16, Copyright 1995 Free Software Foundation, Inc... (gdb) (gdb)是提示符,在这提示符下可以输入命令,直到退出。(退出命令是 q/Q) 为了尽量和原文档说明的命令相符,即使在本例子中没用的命令我也将演示。
首先我们可以设置 gdb 的屏幕大小。键入: (gdb)set width 70
* 数据:
检查数据
* 语言:
用不同的语言来使用 GDB
* 符号:
检查符号表
* 更改:
更改执行
* GDB 的文件
文件
* 对象 * 控制 GDB * 执行序列: * Emacs: * GDB 的 bug: * 命令行编辑: * 使用历史记录交互: * 格式化文档: * 安装 GDB :
指定调试对象 控制
执行一序列命令 使 GDB 和 Emacs 一起工作
行编辑
如何格式化和打印 GDB 文档
* 索引:
GDB 简介: **************
调试器(比如象 GDB)能让你观察另一个程序在执行时的内部活动,或程序出错时 发生了什么。
GDB 主要能为你做四件事(包括为了完成这些事而附加的功能),帮助你找出程序 中的错误。
Richard Stallman 是 GDB 的始作俑者,另外还有许多别的 GNU 的成员。许多人
为此作出了贡献。(都是老外不提也罢,但愿他们不要来找我麻烦:-))
这里是 GDB 的一个例子: 原文中是使用一个叫 m4 的程序。但很遗憾我找不到这个程序的原代码,
所以没有办法来按照原文来说明。不过反正是个例子,我就拿一个操作系统的 进程调度原码来说明把,原代码我会附在后面。
Fundamentally, the General Public License is a license which says that you have these freedoms and that you cannot take these freedoms away from anyone else. GDB 的作者:

GDB中文手册

GDB中文手册

GDB中文手册/****************************************************/GDB 用调试程序GDB 2概述GDB 5使用GDB UNIX shell 8中运行的程序GDB 8在中运行程序 9调试已运行的程序两种方法: / 9暂停恢复程序运行BreakPoint 9一、设置断点()WatchPoint 10二、设置观察点()CatchPoint 10三、设置捕捉点() 11四、维护停止点 12五、停止条件维护 12六、为停止点设定运行命令 13七、断点菜单 13八、恢复程序运行和单步调试Signals 14九、信号()Thread Stops 15十、线程() 16查看栈信息 18查看源程序 18一、显示源代码 19二、搜索源代码 19三、指定源文件的路径 20四、源代码的内存 21查看运行时数据 21一、表达式 21二、程序变量 22三、数组 23四、输出格式 23五、查看内存 24六、自动显示 25七、设置显示选项GDB 25中关于显示的选项比较多,这里我只例举大多数常用的选项。

27八、历史记录GDB 28九、环境变量 28十、查看寄存器 29改变程序的执行 29一、修改变量值 29二、跳转执行 30三、产生信号量 30四、强制函数返回 30五、强制调用函数GDB 31在不同语言中使用 32后记 1 第页GDB概述是开源组织发布的一个强大的下的程序调试工具。

或许,各位比较喜欢那种GDB GNU UNIX图形界面方式的,像、等的调试,但如果你是在平台下做软件,你会发现VC BCB IDE UNIX这个调试工具有比、的图形化调试器更强大的功能。

所谓寸有所长,尺有所短GDB VC BCB“”就是这个道理。

一般来说,主要帮忙你完成下面四个方面的功能:GDB1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。

GDB_命令详解

GDB_命令详解

GDB 命令详细解释Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。

和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc 或cc编译时就需要用-g参数来打开程序的调试选项。

调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb 可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list :显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。

list -输出从上次调用list命令开始往前的10行程序代码。

list n输出第n行附近的10行程序代码。

list function输出函数function前后的10行程序代码。

* forward/search :从当前行向后查找匹配某个字符串的程序行。

使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。

* reverse-search :和forward/search相反,向前查找字符串。

使用格式同上。

* break :在程序中设置断点,当程序运行到指定行上时,会暂停执行。

使用格式:break 要设置断点的行号* tbreak :设置临时断点,在设置之后只起作用一次。

使用格式:tbreak 要设置临时断点的行号* clear :和break相反,clear用于清除断点。

使用格式:clear 要清除的断点所在的行号* run :启动程序,在run后面带上参数可以传递给正在调试的程序。

GDB中文手册

GDB中文手册

使用GDB一般来说GDB主要调试的是C/C++的程序。

要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。

使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。

如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hello如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。

进入GDB启动GDB的方法有以下几种:1、gdb programprogram也就是你的执行文件,一般在当然目录下。

2、gdb program core用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb pid如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。

gdb会自动attach上去,并调试他。

program应该在PATH环境变量中搜索得到。

GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。

我在下面只例举一些比较常用的参数:参数说明-symbols [file](-s)读取文件中的符号表-exec [file] (-e)调试一个可执行文件-se [file]上二者的缩写-core [file](-c)读入一个core dump文件-pid number (-p)启动attach模式,除错一个执行中的行程。

number 是目标行程的pid-directory [directory] (-d)将directory加入原始码的搜寻路行-readnow (-r)一次读取完所有的符号表,这会让启动gdb的时间变长,但在执行往后的除错动作会较快速。

下列还有部分选择性的参数,我列出几个目前用的到的:-quiet -silent -q安静模式,启动时gdb将不会显示版权页。

gdb常用命令详解

gdb常用命令详解

gdb常用命令详解GDB是GNU调试器的缩写,是一款功能强大的调试工具。

它可以帮助开发人员定位和解决程序中的错误,提供了一系列常用命令来进行代码调试。

本文将详细介绍gdb常用命令及其用法,帮助读者更好地利用gdb进行程序调试。

以下是一些常用的gdb命令:1. 启动程序:使用gdb命令后,可以通过"run"命令启动需要调试的程序。

例如:run program。

2. 设置断点:使用"break"命令可以在程序的指定位置设置断点。

例如:break main,在程序执行到main函数时会停下来。

3. 列出断点:使用"info breakpoints"命令可以列出当前设置的所有断点。

4. 删除断点:使用"delete"命令可以删除指定的断点。

例如:delete 1,删除编号为1的断点。

5. 单步执行:使用"step"命令可以逐行执行程序,并进入函数内部。

例如:step。

6. 运行到下一个断点:使用"next"命令可以执行当前行,并跳过函数内部的执行。

例如:next。

7. 继续执行:使用"continue"命令可以继续程序的执行,直到下一个断点或程序结束。

8. 打印变量:使用"print"命令可以打印指定变量的值。

例如:print variable。

9. 查看堆栈:使用"backtrace"命令可以查看当前函数的调用堆栈。

10. 查看源代码:使用"list"命令可以查看当前位置周围的源代码。

11. 修改变量值:使用"set"命令可以修改指定变量的值。

例如:set variable = value。

12. 监视变量:使用"watch"命令可以监视指定变量的值,当该变量的值发生改变时,程序会停下来。

GDB手册中文版

GDB手册中文版

GDB用户手册目录目录 (1)摘要 (2)自由软件 (2)自由软件急需自由文档 (2)GDB的贡献者们 (4)1.一个简单的GDB会话 (8)2.征服GDB的进与出 (13)2.1调用GDB (13)2.1.1 选择文件 (14)2.1.2 选择模式 (16)2.1.3 启动期间,GDB做了什么 (19)2.2 退出GDB (20)2.3 Shell命令 (21)2.4 Loging输出 (21)3.GDB命令 (22)3.1命令语法 (22)3.2命令完成 (23)3.3获得帮助 (25)4.在GDB下运行程序 (29)4.1 适合调试的编译 (29)4.2 启动程序 (30)4.3 程序的参数 (32)4.4 程序的环境 (32)4.5 程序的工作目录 (34)4.6 程序的输入输出 (35)4.7 调试某个已运行的进程 (36)4.8 杀掉子进程 (37)4.9 多线程程序的调试 (37)4.10 多进程程序的调试 (40)5.0停止与继续 (42)摘要象GDB这样的调试程序,目的就是让你可以查看其它程序的内部运行过程,或者是在它崩溃的那一时刻它在做什么。

GDB能做4件事(这些还需附加其他的一些事),帮助你捕获在场的错误:·启动程序,设定任何可以影响它行为的东西。

·在特定的条件下使程序停止。

·当程序停止时,分析发生了什么。

·改变程序里的一些东西,进行一个由于bug所导致的结果的矫正性试验,同时继续了解另外一个bug。

可以使用GDB调试用C和C++编写的程序,更多信息参见支持的语言,及C与C++。

部分支持Modula-2,Modula-2的更多信息参见Modula-2。

在调试使用sets、subranges、file variables或嵌套函数的Pascal程序时,目前不能工作。

GDB不支持entering expressions、printing values或者类似特性的Pascal语法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GDB MI的命令总共分为以下几个部分:1.断点(Breakpoint)2.程序环境(Program Context)3.线程(Thread)4.程序执行(Program Execution)5.栈(Stack)6.变量(Variable)7.数据(Data)8.跟踪点(Tracepoint)9.符号(Symbol)10.文件(File)11.目标数据(Target Manipulation)12.其它杂项我们以下面这段代码为例演示各种命令的执行结果:/*** demo.c*/#include <stdio.h>int swap(int a[], int len){int i;int temp;for(i = 0; i < len / 2; i++){temp = a[i];a[i] = a[len - i - 1];a[len - i - 1] = temp;}return 0;}int main(){int array[10];int i;for(i = 0; i < 10; i++)array[i] = i;printf("swap before:");for(i = 0; i < 10; i++)printf("%d ", array[i]);printf(" \n");swap(array, 10);printf("swap after:");for(i = 0; i < 10; i++)printf("%d ", array[i]);printf(" \n");return 0;}执行gcc -g demo.c -o demo.exe编译。

具体详细的命令还请大家看gdb手册,下面一一介绍:1.断点-break-after用法:-break-after number count语义:第number个断点在被执行count次后有效-break-condition用法:-break-condition number expr语义:第number个断点在表达式expr为true时有效-break-delete用法:-break-delete ( breakpoint number )+语义:删除指定number 的多个断点-break-disable用法:-break-disable ( breakpoint number)+语义:使指定number的多个断点失效-break-enable用法:-break-enable ( breakpoint number)+语义:使指定number的多个断点起效-break-info用法:-break-info breakpoint语义:得到指定断点的信息-break-insert用法:-break-insert [ -t ] [ -h ] [ -r ][ -c condition ] [ -i ignore-count ][ -p thread ] [ line | addr ]语义:-t 插入一个临时断点-h 插于一个硬件端点-r 插入一个正则断点,当函数名匹配正则表达式时有效-c 插入一个条件断点-i 插入一个指定无效次数的断点如果指定了line选项,可以使用如下格式:函数文件名:行号文件名:函数地址-break-list用法:-break-list语义:先是已插入断点的列表-break-watch用法:-break-watch [ -a | -r ] variable语义:创建一个观察点,-a表示对variable读写时有效,-r表示只读时有效运行效果:(gdb)-break-insert main^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0040 10f6",func="main",file="demo.c",line="23",times="0"}(gdb)-break-insert 28^done,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",addr="0x0040 1108",func="main",file="demo.c",line="28",times="0"}(gdb)-break-list^done,BreakpointTable={nr_rows="2",nr_cols="6",hdr=[{width="3",alignment="-1", col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",col hdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",ali gnment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_na me="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="W hat"}],body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0 04010f6",func="main",file="demo.c",line="23",times="0"},bkpt={number="2",type="br eakpoint",disp="keep",enabled="y",addr="0x00401108",func="main",file="demo.c",lin e="28",times="0"}]}(gdb)-exec-run^running(gdb)*stopped,reason="breakpoint-hit",bkptno="1",thread-id="1",frame={addr="0x004010 f6",func="main",args=[],file="demo.c",line="23"}(gdb)-exec-continue^running(gdb)*stopped,reason="breakpoint-hit",bkptno="2",thread-id="1",frame={addr="0x004011 08",func="main",args=[],file="demo.c",line="28"}(gdb)-break-delete 1^done(gdb)2.程序环境-exec-arguments用法:-exec-arguments args语义:设置程序命令行参数-exec-show-arguments用法:-exec-show-arguments语义:显示命令行参数-environment-cd用法:-environment-cd pathdir语义:设置GDB的工作目录-environment-directory用法:-environment-directory [ -r ] [ pathdir ]+语义:添加一个或多个pathdir到源文件的搜索路径,如果"-r"被指定,pathdir将被设为缺省的搜索路径-environment-path用法:-environment-path [ -r ] [ pathdir ]+语义:添加一个或多个pathdir到目标文件的搜索路径,如果"-r"被指定,pathdir 将被设为GDB启动时的搜索路径-environment-pwd用法:-environment-pwd语义:显示当前工作目录3.线程-thread-info语义:-thread-list-ids用法:-thread-list-ids语义:产生一个GDB当前已知线程的链表-thread-select用法:-thread-select threadnum语义:使threadnum成为当前线程效果如下:(gdb)-thread-list-ids^done,thread-ids={thread-id="3",thread-id="1"},number-of-threads="2"(gdb)-thread-select 1^done,new-thread-id="1",frame={level="0",func="main",args=[],file="demo.c",line= "27"},line="27",file="demo.c"(gdb)4. 程序执行这些命令都是异步命令-exec-continue用法:-exec-continue语义:继续执行程序,直到有断点或者程序退出-exec-finish用法:-exec-finish语义:将当前函数执行完毕-exec-interrupt用法:-exec-interrupt语义:中止正在执行的程序-exec-next用法:-exec-next语义:执行一行源代码-exec-next-instruction用法:-exec-next-instruction语义:执行一条机器指令-exec-return用法:-exec-return语义:中止当前函数的执行,立即返回-exec-run用法:-exec-run语义:开始执行程序,直到遇到断点或退出-exec-step用法:-exec-step语义:执行到下一个源代码行,如果此行是函数调用,则停留在调用函数的开始处-exec-step-instruction用法:-exec-step-instruction语义:执行一条机器指令-exec-until用法:-exec-until [ location ]语义:一直执行,直到达到location5. 栈-stack-info-frame尚没实现-stack-info-depth用法:-stack-info-depth [ max-depth ]语义:显示栈深度,如果指定了max-depth,超过max-depth的帧不会被计算-stack-list-arguments用法:-stack-list-arguments show-values[ low-frame high-frame ]语义:显示帧参数,show-values为0只显示参数名称,为1显示名称和值,如果指定了low-frame,high-frame则只显示它们之间的参数-stack-list-frames用法:-stack-list-frames [ low-frame high-frame ]语义:列举所有帧,如果指定low-frame和high-frame则只显示它们之间的帧-stack-list-locals用法:-stack-list-locals print-values语义:显示当前帧的本地变量,如果print-values为0,只显示变量名称,为1显示名称和值-stack-select-frame用法:-stack-select-frame framenum语义:选择framenum帧为当前帧效果如下:6.变量-var-create用法:-var-create {name | "-"} {frame-addr | "*"} expression语义:创建一个变量对象name表示变量名,如果指定"-",变量名将被自动创建frame-addr表示创建变量所在帧的基址expression可以有三种:地址,地址块,寄存器-var-delete用法:-var-delete name语义:删除名为name的变量对象-var-set-format用法:-var-set-format name format-spec语义:设置名为name的变量的输出格式format-spec ==>{binary | decimal | hexadecimal | octal | natural}-var-show-format用法:-var-show-format name语义:查看名为name的变量的输出格式,格式只有上面format-spec指定的几种-var-info-num-children用法:-var-info-num-children name语义:查看名为name的变量的子变量数目-var-list-children用法:-var-list-children [print-values] name语义:查看名为name的变量的子变量,如果print-values为0或者--no-values 则只显示子变量名,如果为1或--all-values显示子变量名和值-var-info-type用法:-var-info-type name语义:查看名为name的变量的类型-var-info-expression用法:-var-info-expression name语义:查看名为name的变量的表达式,可返回的表达式语言之有三种:C,C++,JA V A-var-show-attributes用法:-var-show-attributes name语义:查看名为name的变量的属性,属性为{ { editable | noneditable } | TBD }-var-evaluate-expression用法:-var-evaluate-expression name语义:计算名为name的变量的表达式-var-assign用法:-var-assign name expression语义:将一个新的表达式赋给名为name的变量-var-update用法:-var-update name语义:更新名为name的变量值,即根据当前的内存或寄存器重新计算变量值效果如下:(gdb)-var-create i 1 2^done,name="i",numchild="0",type="int"(gdb)-var-create - 1 3^done,name="var2",numchild="0",type="int"(gdb)-var-delete var2^done,ndeleted="1"(gdb)-var-show-format i^done,format="natural"(gdb)-var-list-children 1 i^done,numchild="0"(gdb)-var-info-type i^done,type="int"(gdb)-var-info-expression i^done,lang="C",exp="2"(gdb)-var-show-attributes i^done,attr="editable"(gdb)-var-evaluate-expression i^done,value="2"(gdb)-var-update i^done,changelist=[{name="i",in_scope="true",type_changed="false"}] (gdb)7.数据-data-disassemble用法:-data-disassemble[ -s start-addr -e end-addr ]| [ -f filename -l linenum [ -n lines ] ]-- mode语义:反汇编某一块内存区,可以按以下两种方式指定内存区:1). 指定开始和结束地址,start-addr, end-addr2). 指定源文件名和行范围mode是显示格式,0显示反汇编代码,1混合显示反汇编和源代码-data-evaluate-expression用法:-data-evaluate-expression expr语义:计算表达式expr的值-data-list-changed-registers用法:-data-list-changed-registers语义:显示值有变化的寄存器列表-data-list-register-names用法:-data-list-register-names [ ( regno )+ ]语义:显示指定了号码的寄存器名字,如果没指定regno,则显示所有的寄存器名字列表-data-list-register-values用法:-data-list-register-values fmt [ ( regno )*]语义:显示寄存器的内容,fmt是值的显示格式,如下:de> xde> Hexadecimalde> ode> Octalde> tde> Binaryde> dde> Decimalde> rde> Rawde> Nde> Natural-data-read-memory用法:-data-read-memory [ -o byte-offset ]address word-format word-sizenr-rows nr-cols [ aschar ]语义:address指定开始地址,byte-offset指定从开始地址的偏移值,word-format每个字的显示格式,word-size每个字的长度nr-rows,nr-cols指定输出格式为几行几列效果如下:(gdb)-data-disassemble -s $pc -e "$pc + 20" -- 0^done,asm_insns=[{address="0x004010f6",func-name="main",offset="37",inst="call 0x401250<__main>"},{address="0x004010fb",func-name="main",offset="42",inst="movl$0x0,0xffffffc4(%ebp)"},{address="0x00401102",func-name="main",offset="49", inst="cmpl$0x9,0xffffffc4(%ebp)"},{address="0x00401106",func-name="main",offset="53",inst="jg 0x401119 <main+72>"},{address="0x00401108",func-name="main",offset="55",inst="mov 0xffffffc4(%ebp),%edx"}](gdb)-data-evaluate-expression &i^done,value="0x22eeac"(gdb)-data-list-register-values x 1 2 3 4^done,register-values=[{number="1",value="0x0"},{number="2",value="0x4c"},{nu mber="3",value="0x4"},{number="4",value="0x22ee70"}](gdb)-exec-next^running(gdb)*stopped,reason="end-stepping-range",thread-id="1",frame={addr="0x004010fb",fun c="main",args=[],file="demo.c",line="27"}(gdb)-data-list-changed-registers^done,changed-registers=["0","2","8","9"](gdb)-data-read-memory $pc x 2 3 2^done,addr="0x004010fb",nr-bytes="12",total-bytes="12",next-row="0x004010ff",pr ev-row="0x004010f7",next-page="0x00401107",prev-page="0x004010ef",memory=[{ addr="0x004010fb",data=["0x45c7","0x00c4"]},{addr="0x004010ff",data=["0x0000","0x83 00"]},{addr="0x00401103",data=["0xc47d","0x7f09"]}](gdb)以后的8、9等命令GDB大部分尚没实现,或很少使用,不再解释。

相关文档
最新文档