❶ 深度linux V20如何安装gdb,如何用gdb调试程序、用gdb设置断点删除断点、gdb自动显示变量值、看内存值
因本人通过几个小时的时间才解决这个问题,希望我的答案能节省大部分初学者在gdb上的时间。我也是今天才接触gdb,以下是有关深度linux V20的gdb调试问题的初步总结:安装gdb方式,sudo apt-get install gdb ,有ok点击ok安装,直到安装结束。gcc -g aa.c之后才能调试a.out文件。(aa.c表示你的源文件)用法gdb a.out或者gdb进入后file a.outl N是查看N行附近的代码,直接l是显示接下去的代码。r运行过程中遇到断点,按l则显示断点附近代码。l 函数名是查看函数名里边的代码q退出调试。p 变量,查看变量即时值。r运行。n单步执行。s单步执行-进入函数。c连续多步运行,直到下个断点(循环的下一次断点)暂停。b N第N行设置断点。b 函数名,在函数名的入口处设置断点。b 文件名:行号,在指定文件名行号设置断点。其中文件名是源文件的文件名。(条件断点)b 行号 if 变量==N,表示该行号的断点必须满足变量==N的条件下才停下来。ignore 断点编号 N,表示该断点编号在接下来的运行过程中忽略N次,即第N+1次该断点才会停下来。info break显示全部断点。简写i bdelete 1-3删除编号为1到3的断点。简写 d 1-3。d 4只删除编号为4的断点。delete break删除所有断点。无法简写clear 20删除20行断点。运行中disable break n 禁用断点号为n的断点。enable break n 使能断点为n的断点号重新启用。其中break可以简写为bdisplay {var1,var2,var3}自动显示var1~3变量的值。要删除display则用delete display N,N表示display的编号,如果不加N则表示删除全部的display。如果要自动显示数组内容,用display 数组名。注意:display需要r之后才能设置。watch {var1,var2,var3}自动跟踪改变的值,只要有改变才显示watch。要删除watch,用d N,N代表watch编号,用i b可以查看该编号。注意:watch需要r之后才能设置。gdb死循环程序按键盘ctrl+c可结束程序****************要查看内存地址的内容用x /nfu 内存地址。以下是n、f、u的解释 其中n表示要显示多少个内存单元。 f表示显示方式, 可取如下值x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。i 指令地址格式c 按字符格式显示变量。f 按浮点数格式显示变量。 u表示一个地址单元的长度b表示单字节,h表示双字节,w表示四字节,g表示八字节*****************
❷ 谁知道.gdb格式的文件用什么打开
GDB轻松调试一、引言 在了解GDB可以做什么,怎么做之前,让我们先来看看为什么要用GDB,或者说对调试工具有什么期望。一般我们使用GDB(或其他调试工具)是为了发现程序bug,更经常地是在已知程序有错的情况下定位bug。既然这样,我们就需要跟踪程序的执行情况,查看程序执行是否正常,当然这就需要有个让我们与执行程序交互的环境,调试工具提供一个能让程序在你的掌控下执行,并让你能够查看一些执行过程中的“内幕信息”的环境。为了查看程序运行过程中的状态,我们就希望程序能在适当的位置或者在一定的条件下能够暂停运行;为此,调试工具提供了断点、查看变量/表达式、显示程序栈等功能。看了某个点的“内幕”后,我们还期望更多,所以要能控制程序运行才行,这就要求断点、继续运行、单步(多步)运行、进入函数运行等功能,在某些情况下,还需要通过修改当前的执行环境(变量等)来达到期望的执行顺序。也就是说,光看着是不够的,还需要能改才行。理解了这些问题后,我们就明白GDB的各个功能的用意了,自然也就明白该如何使用调试工具了。当然,要让GDB有效的发挥作用,还是需要一定的经验与技巧,而这主要靠实践,学习资料(包括本文)充其量只能帮你一把(小心别让它帮倒忙)。总而言之,我们首先要明白使用调试工具的目的和用意,才能理解它的各项功能,才能借助它快速有效的发现问题;否则,即使工具再强大,你也不知道该如何使用才好。另外要多结合使用代码检视、运行日志、测试工具等方法来发现潜在的问题,提供程序的质量。这些问题将在另文探讨,先做个广告。二、GDB能做什么 GDB可以用来调试C、C++、Mola-2的程序。一般来说,GDB能做的事大致可以分为四类:1、启动程序,按指定的方式执行程序。2、在指定条件下使程序暂停.3、当程序被停住时,可以检查此时你的程序中的变化。4、改变程序中的变量或执行顺序来试验。三、GDB使用概述 首先要了解的是gdb的help命令,因为你可能记不住各个命令的语法和用途,但只要能正确使用help命令,你就不需要任何其它的gdb资料。启动gdb后,输入help[[email protected] eric]$ gdbGNU gdb Red Hat Linux (5.3.90-0.20030710.40rh)Copyright 2003 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show ing" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux-gnu".(gdb) helpList of classes of commands:aliases — Aliases of other commandsbreakpoints — Making program stop at certain pointsdata — Examining datafiles — Specifying and examining filesinternals — Maintenance commandsobscure — Obscure featuresrunning — Running the programstack — Examining the stackstatus — Status inquiriessupport — Support facilitiestracepoints — Tracing of program execution without stopping the programuser-defined — User-defined commandsType "help" followed by a class name for a list of commands in that class.Type "help" followed by command name for full documentation.Command name abbreviations are allowed if unambiguous.(gdb)如上文显示,gdb的命令很多,所以把它分成许多个种类。help命令只是例出gdb的命令种类,如果要看某类中的命令,可以使用help <class> 命令,如:help breakpoints,查看设置断点的所有命令。当如也可以直接help <command>来查看某个命令的具体信息。gdb 技巧:在记不清整个命令时,可以只打命令的前一个或几个字符,然后敲击两次TAB键来列出所有以这几个字符开头的命令;另为,大多命令都有缩写,如b同 break,c同continue,n同next,p同print等。另为,一个命令在输入能唯一标示命令的前缀后,按一下TAB键就能补齐命令的全称,比如输入ba后按一下TAB键,就自动补齐为backtrace,输入pr后按一下TAB键就补齐为print。为调试编译代码 为了使 gdb 正常工作, 你必须使你的程序在编译时包含调试信息. 调试信息包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号. gdb 利用这些信息使源代码和机器码相关联. 在编译时用 -g 选项打开调试选项. 在GDB中运行程序当以gdb <program>方式启动gdb后,可以使用r或是run命令运行程序。在程序运行之前,你有可能需要设置下面四方面的事。1、程序运行参数。set args 可指定运行时参数。(如:set args 10 20 30 40 50)show args 命令可以查看设置好的运行参数。2、运行环境。path <dir> 可设定程序的运行路径。show paths 查看程序的运行路径。set environment varname [=value] 设置环境变量。如:set env USER=hchenshow environment [varname] 查看环境变量。3、工作目录。cd <dir> 相当于shell的cd命令。pwd 显示当前的所在目录。4、程序的输入输出。info terminal 显示你程序用到的终端的模式。使用重定向控制程序输出。如:run > outfiletty命令可以指写输入输出的终端设备。如:tty /dev/ttyb调试已运行的程序可以有两种方法调试已运行程序:1、用ps查看正在运行的程序的进程ID,然后用gdb <program> PID格式挂接正在运行的程序。 2、先用gdb <program>关联上程序,并进行gdb,在gdb中用attach命令来挂接程序正在运行的进程。detach可用来取消挂接的进程。暂停/恢复程序运行你可以使用info program 来查看程序的当前的执行状态。在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。如果要恢复程序运行,可以使用c或是continue命令。查看变量/表达式的值可以使用print expr(或p expr)来查看程序变量/表达式的值显示程序栈可以使用backtrace(或bt)来显示程序栈单步跟踪next [n] 执行下一条(或n条)语句,不进入子程序step [n] 执行下一条(或n条)语句,进入子程序,可用finish从子程序返回四、GDB常用命令 backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) breakpoint 在程序中设置一个断点 cd 改变当前工作目录 clear 删除刚才停止处的断点 commands 命中断点时,列出将要执行的命令 continue 从断点开始继续执行 delete 删除一个断点或监测点;也可与其他命令一起使用 display 程序停止时显示变量和表达时 down 下移栈帧,使得另一个函数成为当前函数 frame 选择下一条continue命令的帧 info 显示与该程序有关的各种信息 jump 在源程序中的另一点开始运行 kill 异常终止在gdb 控制下运行的程序 list 列出相应于正在执行的程序的原文件内容 next 执行下一个源程序行,从而执行其整体中的一个函数 print 显示变量或表达式的值 pwd 显示当前工作目录 pype 显示一个数据结构(如一个结构或C++类)的内容 quit 退出gdb reverse-search 在源文件中反向搜索正规表达式 run 执行该程序 search 在源文件中搜索正规表达式 set variable 给变量赋值 signal 将一个信号发送到正在运行的进程 step 执行下一个源程序行,必要时进入下一个函数 undisplay display命令的反命令,不要显示表达式 until 结束当前循环 up 上移栈帧,使另一函数成为当前函数 watch 在程序中设置一个监测点(即数据断点) whatis 显示变量或函数类型命令的具体使用方法请用上面介绍的help查询,看不明白的地方就多试试。