Sun Studio 12: Debugging a Program With dbx

Block Local Operator

The block local operator (:line_number) allows you to refer specifically to a variable in a nested block. You might want to do so if you have a local variable shadowing a parameter or member name, or if you have several blocks, each with its own version of a local variable. The line_number is the number of the first line of code within the block for the variable of interest. When dbx qualifies a local variable with the block local operator, dbx uses the line number of the first block of code, but you can use any line number within the scope in dbx expressions.

In the following example, the block local operator (:230) is combined with the backquote operator.

(dbx) stop in `animate.o`change_glyph:230`item

The following example shows how dbx evaluates a variable name qualified with the block local operator when there are multiple occurrences in a function.

(dbx) list 1,$
    1   #include <stddef.h>
    3   int main(int argc, char** argv) {
    5   int i=1;
    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   }
(dbx) whereis i
variable: `a.out`t.c`main`I
variable: `a.out`t.c`main:8`I
variable: `a.out`t.c`main:10`I
(dbx) stop at 12 ; run
(dbx) print i
i = 3
(dbx) which 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