Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1617740
  • 博文数量: 268
  • 博客积分: 8708
  • 博客等级: 中将
  • 技术积分: 3764
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-06 15:58
文章分类

全部博文(268)

文章存档

2014年(1)

2013年(15)

2012年(23)

2011年(60)

2010年(51)

2009年(12)

2008年(59)

2007年(47)

分类:

2007-04-06 17:13:29


标志

-a ProcessID 
将调试程序和正在运行的进程连接起来。为了连接调试程序,您需要拥有对该进程使用 kill 命令的权限。使用 ps 命令来决定进程的 ID。如果您获得许可,dbx 程序中断该进程,决定目标文件的完整名称,读入符号信息和提示输入命令。
 
-c CommandFile 
读入标准输入之前,在文件中运行 dbx 子命令。$HOME 目录中指定的文件将首先被处理;然后处理当前目录中的文件。当前目录中的命令文件将会覆盖 $HOME 目录中的命令文件。如果指定的文件既不存在于 $HOME 目录也不存在于当前目录,将会显示警告消息。source 子命令可以在 dbx 程序运行后使用。
 
-d NestingDepth 
设置程序块的嵌套限制。缺省的嵌套深度限制为 25
 
-E DebugEnvironment 
指定调试程序的环境变量。
 
-p oldpath=newpath:...| pathfile 
 oldpath=newpath 的格式在检查核心文件时指定替换的库的路径。oldpath 指定了将被替换的值(存储在核心文件中)而 newpath 指定了将要替换的新的值。这些可能是全部或者部分的,绝对路径或者相对路径。可以指定若干个替换,它们之间用冒号隔开。相反 -p 标志可以指定文件名,映射以前读入的描述格式。每行中只允许有一个映射从文件中读出。
 
-F 
可以用来关闭缓慢读入模式并使 dbx 命令在启动时就读入全部符号。缺省情况下,缓慢读入模式是打开的:它在 dbx 会话初始化时读入需要的符号表信息。。在该模式下,dbx 将不会读入那些符号信息尚未被读入的变量和类型。因此,诸如 whereis i 等命令并不列出在所有函数中的变量 i 的全部实例。
 
-I Directory 
(大写 i)将 Directory 变量指定的目录包含到搜索源文件目录列表中。搜索源文件的缺省目录为:
 
文件编译时该源文件所在的目录。只有编译器设置了对象中的源路径时才能搜索目录。
 
当前目录。
 
当前程序所在的目录。

 
-k 
映射内存地址;这对于内核调试是非常有用的。
 
-r 
立即运行对象文件。如果它成功结束,dbx 调试程序将会退出。否则,将会进入调试程序并报告中断的原因。
 

注意:除非指定了 -rdbx 命令将会提示用户并等待命令输入。
 
-u 
 dbx 命令为文件名加上 @ (at 符号前缀。该标志减少符号名混淆的可能性。
 
-x 
防止 dbx 命令跳过来自于 FORTRAN 源代码的 _(下划线)字符。该符号允许 dbx 在符号之间区别哪些除了下划线以外都是相同的,例如 xxx xxx_
 

示例

下列示例解释如何在启动 dbx 调试程序时同时启动一个进程。本例使用了一个名为 samp.c 的程序。该 C 程序首先经过 -g 标志的编译生成一个包含符号列表引用的目标文件。在此情况下,该程序命名为:samp
 

$ cc -g samp.c -o sampsamp 
程序运行后,操作系统会报告一个总线错误并将核心映像写入到您当前的工作目录当中,如下所示:


$ samp
Bus Error - core dumped
要确定发生错误的位置,请输入:


$ dbx samp
系统将会返回如下信息:


dbx version 3.1
Type 'help' for help.
reading symbolic information . . . [
using memory image in core]
  25   x = 0;
(dbx) quit
该示例解释了如何将 dbx 连接到进程当中去。该示例使用了如下程序 looper.c
 

main()
{
      int i,x[10];
       
      for (i = 0; i < 10;);
}
该程序将不会中止因为 i 不会增加。使用 -g 标志编译 looper.c 得到符号调试能力:


$ cc -g looper.c -o looper
在命令行中运行 looper 并执行以下步骤就会在它运行的时候将 dbx 连接到程序中去:


要将 dbx 连接到 looper,您必须确定进程的 ID。如果您没有运行 looper 作为后台程序,您必须启动另外一个 Xwindow 窗口。在该 Xwindow 窗口中,输入:
 

ps -u UserID
其中 UserID 是您的登录标识。所有属于您的活动的进程将会显示如下:


PID     TTY      TIME    COMMAND
68      console   0:04    sh
467     lft3     10:48    looper
在该示例中和 looper 相关的进程 ID  467


要将 dbx 连接到 looper中,请输入:
 

$ dbx -a 467
系统将返回如下的信息:



Waiting to attach to process 467 . . .
Successfully attached to /tmp/looper.
dbx is initializing
Type 'help' for help.
reading symbolic information . . .
 
attached in main at line 5
5     for (i = 0; i < 10;);
(dbx) 
现在您可以查询并调试进程如同该程序最初就是由 dbx 来启动的。


阅读(1043) | 评论(0) | 转发(0) |
0

上一篇:dbx-1 命令

下一篇:dbx-3 命令

给主人留下些什么吧!~~