使用块局部操作符 (: line_number) 可专门引用嵌套块中的变量。如果有遮蔽参数或成员名的局部变量,或如果有几个块,其中每个块都有其自己的局部变量版本,可能需要这样做。line_number 是相关变量所对应的块内第一行代码的号码。当 dbx 使用块局部操作符限定局部变量时,dbx 会使用第一个代码块的行号,但您可以在 dbx 表达式中使用作用域内的任意行号。
在下例中,块局部操作符 (:230) 与反引号操作符配合使用。
(dbx) stop in `animate.o`change_glyph:230`item |
下例显示了当函数中有多个具体值时,dbx 如何对使用块局部操作符限定的变量名求值。
(dbx) list 1,$ 1 #include <stddef.h> 2 3 int main(int argc, char** argv) { 4 5 int i=1; 6 7 { 8 int i=2; 9 { 10 int j=4; 11 int i=3; 12 printf("hello"); 13 } 14 printf("world\n"); 15 } 16 printf("hi\n"); 17 } 18 (dbx) whereis i variable: `a.out`t.c`main`i variable: `a.out`t.c`main:8`i variable: `a.out`t.`main:10`i (dbx) stop at 12 ; run ... (dbx) print i i = 3 (dbx) which i `a.out`t.c`main:10`i (dbx) print `main:7`i `a.out`t.c`main`i = 1 (dbx) print `main:8`i `a.out`t.c`main:8`i = 2 (dbx) print `main:10`i `a.out`t.c`main:10`i = 3 (dbx) print `main:14`i `a.out`t.c`main:8`i = 2 (dbx) print `main:15`i `a.out`t.c`main`i = 1 |