For the following examples, we will consider the following units:
main.ads: 1: with Bar; 2: package Main is 3: procedure Foo (B : in Integer); 4: C : Integer; 5: private 6: D : Integer; 7: end Main; main.adb: 1: package body Main is 2: procedure Foo (B : in Integer) is 3: begin 4: C := B; 5: D := B; 6: Bar.Print (B); 7: Bar.Print (C); 8: end Foo; 9: end Main; bar.ads: 1: package Bar is 2: procedure Print (B : Integer); 3: end bar;
The first thing to do is to recompile your application (for instance, in
that case just by doing a gnatmake main
, so that GNAT generates
the cross-referencing information.
You can then issue any of the following commands:
gnatxref main.adb
gnatxref generates cross-reference information for main.adb and every unit 'with'ed by main.adb.The output would be:
B Type: Integer Decl: bar.ads 2:22 B Type: Integer Decl: main.ads 3:20 Body: main.adb 2:20 Ref: main.adb 4:13 5:13 6:19 Bar Type: Unit Decl: bar.ads 1:9 Ref: main.adb 6:8 7:8 main.ads 1:6 C Type: Integer Decl: main.ads 4:5 Modi: main.adb 4:8 Ref: main.adb 7:19 D Type: Integer Decl: main.ads 6:5 Modi: main.adb 5:8 Foo Type: Unit Decl: main.ads 3:15 Body: main.adb 2:15 Main Type: Unit Decl: main.ads 2:9 Body: main.adb 1:14 Print Type: Unit Decl: bar.ads 2:15 Ref: main.adb 6:12 7:12This shows that the entity Main is declared in main.ads, line 2, column 9, its body is in main.adb, line 1, column 14 and is not referenced any where.
The entity Print is declared in bar.ads, line 2, column 15 and it is referenced in main.adb, line 6 column 12 and line 7 column 12.
gnatxref package1.adb package2.ads
gnatxref will generates cross-reference information for package1.adb, package2.ads and any other package 'with'ed by any of these.