6. 语句种类
SystemTap 脚本语句使开发人员在函数和探针处理函数编写结构化的控制流程。一个探针事件内执行语句数目不能超过MAXACTION ,默认值为1000 ,参阅1.6 节。
6.1 break 和continue
Break 或continue 用于跳出或迭代最内层的 循环语句,如
while
,
for
或
foreach
语句。它们的语法和语义均与 C 语言的相同。
delete
删除一个元素。
下述语句从ARRAY 组数中删除由下标元组指定的元素。删除后,元素不再存在,下次迭代将不会访问该元素。删除不存在的元素不会引致错误。
delete ARRAY[INDEX1, INDEX2, …]
下述语法删除ARRAY 数组内的所有元素:
delete ARRAY
下述语句删除(译者注:准确地说应该是重置)SCLAR 变量的值。整数和字符串变量分别复原为0 和 null(“”) ,而统计变量复原这它们初始时的空状态。
delete SCALAR
表达式的计算结构为字符串或整数值,最终丢弃该值(译者注:表达式不能储存计算机结果,只能将之赋给其它变量,但对表达式来的,此值被之丢掉)。
一般语法形式:
for (EXP1; EXP2; EXP3) STMT
for
语句类似于C 语言的for 语句
。for
表达式先执行初始化EXP1 ,当EXP2 非零时,执行STMT ,然后执行迭代表达式EXP3 。
一般语法形式:
foreach (VAR in ARRAY) STMT
foreach 语句 循环遍历全局数组 ARRAY 的每个元素,并将当前键值(译者注:即数组下标)赋给 VAR 变量。 Foreach 语句内不能对数组作任何更改。如果 VAR 或 ARRAY 标识符后跟随一个加号( + )或减号( – ),那么迭代顺序变为下标或元素值的升序顺序或降序顺序。
下述语句的行为与第一个例子相同,不同之处是它的下标是一个键值元组(tuple of keys )。最多只能在一个VAR 或ARRAY 标识符上使用迭代顺序后缀(sorting suffix )。
foreach ([VAR1, VAR2, …] in ARRAY) STMT
下述语句同样与第一个例子相同,不同之处是关键字limit 限制 循环 最多迭代EXP 次 。 EXP 的值只在循环开始时计算一次。
foreach (VAR in ARRAY limit EXP) STMT
一般语法形式:
if (EXP) STMT1 [ else STMT2 ]
If 语句将EXP 的整数值与0 比较,如果非零则执行第一个STMT ,否则执行第二个STMT 。
if 语句和C 语言中的if 语句有相同的语法和语义。
next 语使包含它的探针处理函数立即退出。
一般语法形式:
statement1
;
statement2
逗号表示空语句,即不做任何事情。它作为语句间可选的分隔符,通常有助于检测语法错误和处理某种语法二义性。
一般语法形式:
return EXP
Return 语句从包含的函数返回EXP 的值。如果函数没有返回值,则函数体内不需要return 语句,没有返回值函数的类型称为特殊的
unknown
类型。
语句块由方括号({} )包围起来,内有零个或多个语句。下述是它的一般语法形式:
{ STMT1 STMT2 … }
语句块依次执行块内的每条语句。一般情况而言,语句间的分隔符和结束符不是必须的。语句块的语法和语义与C 语言的相同。
一般语法形式:
while (EXP) STMT
While 语句和 C 语言的有着相同的语法和语义。上述语句中,只要整数 EXP 的求值结果为非零,分析器将执行 STMT 。