当前位置:Linux教程 - Linux - GDB调试器使用手册(三)

GDB调试器使用手册(三)



         运行GDB(一些详细的说明):

    前面已经提到过如何运行GDB了,现在让我们来看一些更有趣的东西。你可以在运行
    GDB时通过许多命令行参数指定大量的参数和选项,通过这个你可以在一开始就设置好
    程序运行的环境。
    这里将要描述的命令行参数覆盖了大多数的情况,事实上在一定环境下有的并没有
    什么大用处。最通常的命令就是使用一个参数:
    $gdb <可执行文档名>
    你还可以同时为你的执行文件指定一个core文件:
    $gdb <可执行文件名> core
    你也可以为你要执行的文件指定一个进程号:
    $gdb <可执行文件名> <进程号> 如:&gdb os 1234将使gdb与进程1234相联系(attach)
    除非你还有一个文件叫1234的。gdb首先检查一个core文件。
    如果你是使用一个远程终端进行远程调试的话,那如果你的终端不支持的话,你将无法
    使用第二个参数甚至没有core dump。如果你觉得开头的提示信息比较碍眼的话,你可以
    用gdb -silent。你还可以用命令行参数更加详细的控制GDB的行为。
    打入gdb -help或-h 可以得到这方面的提示。所有的参数都被按照排列的顺序传给gdb
    除非你用了-x参数。
    当gdb开始运行时,它把任何一个不带选项前缀的参数都当作为一个可执行文件或core
    文件(或进程号)。就象在前面加了-se或-c选项。gdb把第一个前面没有选项说明的参数
    看作前面加了-se 选项,而第二个(如果有的话)看作是跟着-c选项后面的。
    许多选项有缩写,用gdb -h可以看到。在gdb中你也可以任意的把选项名掐头去尾,只
    要保证gdb能判断唯一的一个参数就行。
    在这里我们说明一些最常用的参数选项
    -symbols <文件名>(-s <文件名>)------从<文件名>中读去符号。
    -exec <文件名>(-e <文件名>)----在合适的时候执行<文件名>来做用正确的数据与core
    dump的作比较。
    -se <文件名>------从<文件名>中读取符号并把它作为可执行文件。
    -core <文件名>(-c <文件名>)--指定<文件名>为一个core dump 文件。
    -c <数字>----连接到进程号为<数字>,与attach命令相似。
    -command <文件名>
    -x <文件名>-----执行gdb命令,在<文件名>指定的文件中存放着一序列的gdb命令,就
    象一个批处理。
    -directory(-d) <路径>---指定路径。把<路径>加入到搜索原文件的路径中。
    -m
    -mapped----
    注意这个命令不是在所有的系统上都能用。如果你可以通过mmap系统调用来获得内存
    映象文件,你可以用这个命令来使gdb把你当前文件里的符号写入一个文件中,这个文件
    将存放在你的当前路径中。如果你调试的程序叫/temp/fred那么map文件就叫
    ./fred.syms这样当你以后再调试这个程序时,gdb会认识到这个文件的存在,从而从这
    个文件中读取符号,而不是从可执行文件中读取。.syms与主机有关不能共享。
    -r
    -readnow---马上从符号文件中读取整个符号表,而不是使用缺省的。缺省的符号表是
    调入一部分符号,当需要时再读入一部分。这会使开始进入gdb慢一些,但可以加快以后
    的调试速度。

    -m和-r一般在一起使用来建立.syms文件


    接下来再谈谈模式的设置(请听下回分解 :-))
    附:在gdb文档里使用的调试例子我找到了在minix下有这个程序,叫m4有兴趣的
    可以自己去看看模式的选择
    --------------
    现在我们来聊聊gdb运行模式的选择。我们可以用许多模式来运行gdb,例如在“批模式”
    或“安静模式”。这些模式都是在gdb运行时在命令行作为选项指定的。
    `-nx\"
    `-n\"
    不执行任何初始化文件中的命令。(一般初始化文件叫做`.gdbinit\").一般情况下在
    这些文件中的命令会在所有的命令行参数都被传给gdb后执行。

    `-quiet\"
    `-q\"
    “安静模式”。不输出介绍和版权信息。这些信息在“批模式”中也被跳过。

    `-batch\"
    “批模式”。在“批模式”下运行。当在命令文件中的所有命令都被成功的执行后
    gdb返回状态“0”,如果在执行过程中出错,gdb返回一个非零值。
    “批模式”在把gdb作为一个过滤器运行时很有用。比如在一台远程计算机上下载且
    执行一个程序。信息“ Program exited normally”(一般是当运行的程序正常结束
    时出现)不会在这种模式中出现。
    `-cd DIRECTORY\"
    把DIRECTORY作为gdb的工作目录,而非当前目录(一般gdb缺省把当前目录作为工作目
    录)。
    `-fullname\"
    `-f\"
    GNU Emacs 设置这个选项,当我们在Emacs下,把gdb作为它的一个子进程来运行时,
    Emacs告诉gdb按标准输出完整的文件名和行号,一个可视的栈内容。这个格式跟在
    文件名的后面。行号和字符重新按列排,Emacs-to-GDB界面使用\\032字符作为一个
    显示一页原文件的信号。
    `-b BPS\"
    为远程调试设置波特率。

    `-tty DEVICE\"
    使用DEVICE来作为你程序的标准输入输出。
    发布人:netbull 来自:中国Linux开发联盟