Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299735
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-11 16:34:57


第2 章• 调试器概念17
18
语言语法
本章介绍MDB语言语法、运算符以及命令和符号名称解析的规则。
语法
调试器处理来自标准输入的命令。如果标准输入是终端,则MDB提供终端编辑功能。
MDB还可以处理来自宏文件和dcmd 管道的命令,如下所述。语言语法是围绕计算表达式
的值(通常为目标中的内存地址)和向该地址应用dcmd 的概念设计的。当前的地址位置称
为dot,"." 用于引用其值。
metacharacter 是以下字符之一:
[ ] | ! / \ ? = > $ : ; NEWLINE SPACE TAB
blank 是TAB 或SPACE。word 是由一个或多个不带引号的元字符分隔的字符序列。一些元字
符仅用作某些上下文中的分隔符,如下所述。identifier 是字母、数字、下划线、句点或反引
号的序列,以字母、下划线或句点开头。标识符用作符号、变量、dcmd 和walker 的名称。
命令由NEWLINE 或分号(;) 分隔。
dcmd 由以下字或元字符之一表示:
/ \ ? = > $character :character ::identifier
由元字符命名或者前缀为单个$ 或: 的dcmd 是作为内置运算符提供的,实现与传统adb(1)
实用程序命令集的完全兼容。解析dcmd 后,不再将/、\、?、=、>、$ 和: 字符识别为元字
符,直到参数列表结束。
simple-command 是一个后跟零个或多个空格分隔字序列的dcmd。将字作为被调用dcmd 的
参数进行传递,第21 页中的“算术展开”和第23 页中的“加引号”中指定的除外。每
个dcmd 都返回一种退出状态,指示它成功、失败或是通过无效参数调用的。
pipeline 是由| 分隔的一个或多个简单命令的序列。与shell 不同,MDB管道中的dcmd 不作
为单独的进程执行。解析管道后,按从左到右的顺序调用每个dcmd。按第26 页中的
3第3 章
19
“dcmd 管道”中所述处理和存储每个dcmd 的输出。左侧dcmd 完成后,它的输出经处理
后用作管道中下一个dcmd 的输入。如果任何dcmd 未返回成功退出状态,则异常中止管
道。
expression 是对其求值以计算64 位无符号整数值的字的序列。对这些字求值使用的是第21
页中的“算术展开”中所述的规则。
命令
command 是以下形式之一:
pipeline [ ! word ... ] [ ; ]
简单命令或管道可以选择使用! 字符作为后缀,指示调试器应该打开pipe(2),并将MDB
管道中最后一个dcmd 的标准输出发送到通过执行$SHELL -c(后跟由! 字符之后的字串
联而成的字符串)而创建的外部进程。有关更多详细信息,请参阅第23 页中的“Shell
转义”。
expression pipeline [ ! word ... ] [ ; ]
简单命令或管道可以使用表达式作为前缀。执行管道之前,将点(由“.” 表示的变量)
的值设置为表达式的值。
expression , expression pipeline [ ! word ... ] [ ; ]
简单命令或管道可以使用两个表达式作为前缀。计算第一个表达式的值可确定点的新
值,计算第二个表达式的值可确定管道中第一个dcmd 的重复计数。在执行管道中的下
一个dcmd 之前,将对此dcmd 执行count 次。重复计数仅适用于管道中的第一个dcmd。
expression pipeline [ ! word ... ] [ ; ]
如果省略初始表达式,则不修改点;但是,将根据表达式的值重复管道中的第一个
dcmd。
expression [ ! word ... ] [ ; ]
命令只能包含算术表达式。计算表达式的值,将点变量设置为该表达式的值,然后使用
点的新值执行前面的dcmd 和参数。
expression , expression [ ! word ... ] [ ; ]
命令只能包含点表达式和重复计数表达式。将点设置为第一个表达式的值后,按第二个
表达式的值所指定的次数重复执行前面的dcmd 和参数。
expression [ ! word ... ] [ ; ]
如果省略初始表达式,则不修改点,但是按计数表达式的值所指定的次数重复执行前面
的dcmd 和参数。
! word ... [ ; ]
如果命令以! 字符开头,则不执行任何dcmd,而且调试器执行后跟字符串的$SHELL
-c,该字符串通过串联! 字符后的字而构成的。
命令
20 Solaris 模块调试器指南• 2006 年11 月
注释
字以// 开头时,会忽略该字之后NEWLINE 之前的所有字符。
算术展开
MDB命令前面是表示起始地址的可选表达式或起始地址和重复计数时,将执行算术展开。
也可以执行算术展开以计算dcmd 的数值参数。算术表达式可以出现在用方括号括起来且前
面是美元符号($[ expression ]) 的参数列表中,并将被替换为表达式的值。
表达式可以包含以下任一特殊字:
integer 指定的整数值。整数值可以使用0i 或0I 作为前缀以指示二进制值,
使用0o 或0O 作为前缀以指示八进制值,使用0t 或0T 作为前缀以指示
十进制值,以及使用0x 或0X 作为前缀以指示十六进制值(缺省
值)。
0[tT][0-9]+.[0-9]+ 指定的十进制浮点值,已转换为其IEEE 双精度浮点表示形式
’cccccccc’ 通过将每个字符转换为等于其ASCII 值的字节而计算的整数值。在字
符常量中,最多可以指定八个字符。字符按相反顺序(从右到左)填
入整数,从最低有效字节开始。
identifier 由identifier 指定的符号值
(expression) expression 的值
. 点值
& 用于执行dcmd 的最新点值
+ 按当前增量递增的点值
^ 按当前增量递减的点值
增量是一个全局变量,它存储上一个格式设置dcmd 读取的总字节。有关增量的更多信息,
请参阅第26 页中的“格式设置dcmd”的讨论。
一元运算符
一元运算符是右关联的,其优先级高于二元运算符。一元运算符如下:
#expression 逻辑否定
~expression 按位补码
-expression 整型否定
算术展开
 
 
以上文章转自于 : http://developers.sun.com.cn/
阅读(600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~