BBS水木清华站∶精华区

发信人: TJB (老六), 信区: Linux 
标  题: GDB (6) Part One 
发信站: BBS 水木调试站 (Wed Jun  3 08:33:46 1998) 
 
发信人: SYSOP (老六), 信区: Linux 
标  题: GDB 
发信站: 侠剑情缘  (Tue Jun  2 16:08:28 1998), 转信 
 
信件提要:gdb(六) 
原发信站:中国科大BBS站(Fri, 03 Apr 1998 01:27:22) 
 
东西太多了,翻起来好费时间,只好慢慢的贴了。//shy 
如果有人愿意一起做这件事的话请回信到我信箱。 
 
得到帮助 
============ 
   你可以使用help命令来得到gdb的在线帮助。 
 
`help' 
`h' 
      你可以使用help或h后面不加任何参数来得到一个gdb命令类的列表。 
 
          (gdb) help 
          List of classes of commands: 
 
          running -- Running the program 
          stack -- Examining the stack 
          data -- Examining data 
          breakpoints -- Making program stop at certain points 
          files -- Specifying and examining files 
          status -- Status inquiries 
          support -- Support facilities 
          user-defined -- User-defined commands 
          aliases -- Aliases of other commands 
          obscure -- Obscure features 
 
          Type "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) 
 
`help CLASS' 
     使用上面列出的help class作为help或h的参量,你可以得到单一的命令列表。 
     例如显示一个'status'类的列表。 
 
          (gdb) help status 
          Status inquiries. 
 
          List of commands: 
 
          show -- Generic command for showing things set 
           with "set" 
          info -- Generic command for printing status 
 
          Type "help" followed by command name for full 
          documentation. 
          Command name abbreviations are allowed if unambiguous. 
          (gdb) 
 
`help COMMAND' 
     详细列出单个命令的资料。 
 
`complete ARGS' 
     列出所有以ARGS开头的命令。例如: 
 
          complete i 
 
     results in: 
 
          info 
          inspect 
          ignore 
 
     This is intended for use by GNU Emacs. 
 
   除了使用'help'你还可以使用gdb的命令'info'和'show'来查询你程序的 
状态,每个命令可以查询一系列的状态。这些命令以恰当的方式显示所有的 
子命令。 
 
`info' 
     此命令(可以缩写为'i')用来显示你程序的状态。比如,你可以使用info 
args 列出你程序所接受的命令行参数。使用info registers列出寄存器的状态。 
或用info breakpoint列出在程序中设的断点。要获得详细的关于info的信息打 
help info. 
`set' 
     这个命令用来为你的程序设置一个运行环境(使用一个表达式)。比如你 
可以用set prompt $来把gdb的提示符设为$. 
 
`show' 
     与'info'相反,'show'命令用来显示gdb自身的状态。你使用'set'命令来 
可以改变绝大多数由'show'显示的信息。比如使用show radix命令来显示基数。 
用不带任何参变量的'set'命令你可以显示所有你可以设置的变量的值。 
有三个变量是不可以用'set'命令来设置的。 
`show version' 
     显示gdb的版本号。如果你发现gdb有bug的话你应该在bug-reports里加 
入gdb的版本号。 
 
`show copying' 
显示版权信息。 
 
`show warranty' 
显示担保信息。 
在gdb下运行你的程序 
************************** 
   当你在gdb下运行程序时,你必须先为gdb准备好带有调试信息的可执行文档。 
还可以在gdb中为你的程序设置参变量,重定向你程序的输入/输出,设置环境变 
量,调试一个已经执行的程序或kill掉一个子进程。 
   这里许多内容在早先的例子中都已经用到过,可以参见gdb(二)。 
目录: 
 
* 编译::                        为调试编译带调试信息的代码 
* 运行::                        运行你的程序 
* 参变量::                      为你的程序设置参变量 
* 运行环境::                    为你的程序设置运行时环境 
* 设置工作目录::                在gdb中设置程序的工作目录。 
* 输入/输出::                   设定你程序的输入和输出 
* 连接::                        调试一个已经运行的程序 
* 结束子进程::                  Kill子进程 
* 进程信息::                    附加的进程信息 
* 线程::                        调试带多线程的程序 
* 多进程::                   调试带多进程的程序 
为调试准备带调试信息的代码 
=========================== 
   为了高效的调试一个程序,你需要使用编译器来产生附带调试信息的可执行代码 
这些调试信息存储在目标文件中;描述了变量数据类型和函数声明,在原文件代码行 
和执行代码之间建立联系。 
   为产生调试信息,当你使用编译器时指定'-g'选项,就可以为你的程序产生带有 
调试信息的可执行代码。 
   有些c编译器不支持'-g'选项和'-O'选项,那你就有麻烦了,或者有别的方法产生 
带调试信息的可执行代码,要不就没办法了。 
   gcc,GNU的c语言编译器支持'-g'和'-O'选项。这样你就可以产生带调试信息的且 
优化过的可执行代码. 
   当你使用gdb来调试一个使用'-g','-O'选项产生的程序时,千万记住编译器为了优 
化你的程序重新安排了你的程序。不要为运行次序与你原来设想的不同,最简单的例子 
就是当你定义了一个变量但从未使用过它时,gdb中是看不到这个变量的--因为它已经 
被优化掉了。 
   所以有时你不要使用'-O'选项,如果当你不用优化时产生的程序是正确的,而优化 
过后变的不正确了,那么这是编译器的bug你可以向开发者提供bug-reports(包括出错 
的例子)。 
   早期的GUN C语言编译器允许'-gg'选项,也用来产生调试信息,gdb不再支持这种格 
式的调试信息,如果你的编译器支持'-gg'选项,请不要使用它。 
 
-- 
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn] 
 
 
 
 
-- 
☆ 来源:.侠剑情缘 tjb.ml.org.[FROM: [email protected]] 
 
-- 
※ 来源:·BBS 水木调试站 Leeward.lib.tsinghua.edu.cn·[FROM: 202.200.37.100] 

BBS水木清华站∶精华区