program-gdb-7.html

来自「学习linux的工具书」· HTML 代码 · 共 176 行

HTML
176
字号
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
   <meta name="GENERATOR" content="Mozilla/4.05 [zh-CN] (X11; I; Linux 2.1.127 i686) [Netscape]">
   <title>BBS水木清华站∶精华区</title>
</head>
<body>

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

</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?