xref: /llvm-project/lldb/test/Shell/SymbolFile/NativePDB/local-variables.cpp (revision 87aa9c9e4d41ed881453e2fab85b3d25f648bb55)
1 // clang-format off
2 
3 // REQUIRES: system-windows
4 // RUN: %build -o %t.exe -- %s
5 // RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \
6 // RUN:     %p/Inputs/local-variables.lldbinit 2>&1 | FileCheck %s
7 
8 int Function(int Param1, char Param2) {
9   unsigned Local1 = Param1 + 1;
10   char Local2 = Param2 + 1;
11   ++Local1;
12   ++Local2;
13   return Local1;
14 }
15 
16 int main(int argc, char **argv) {
17   int SomeLocal = argc * 2;
18   return Function(SomeLocal, 'a');
19 }
20 
21 // CHECK:      (lldb) target create "{{.*}}local-variables.cpp.tmp.exe"
22 // CHECK-NEXT: Current executable set to '{{.*}}local-variables.cpp.tmp.exe'
23 // CHECK-NEXT: (lldb) command source -s 0 '{{.*}}local-variables.lldbinit'
24 // CHECK-NEXT: Executing commands in '{{.*}}local-variables.lldbinit'.
25 // CHECK-NEXT: (lldb) break set -n main
26 // CHECK-NEXT: Breakpoint 1: where = local-variables.cpp.tmp.exe`main + {{.*}} at local-variables.cpp:{{.*}}, address = {{.*}}
27 // CHECK-NEXT: (lldb) run a b c d e f g
28 // CHECK-NEXT: Process {{.*}} stopped
29 // CHECK-NEXT: * thread #1, stop reason = breakpoint 1.1
30 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`main(argc=8, argv={{.*}}) at local-variables.cpp:{{.*}}
31 // CHECK-NEXT:    14   }
32 // CHECK-NEXT:    15
33 // CHECK-NEXT:    16   int main(int argc, char **argv) {
34 // CHECK-NEXT: -> 17     int SomeLocal = argc * 2;
35 // CHECK-NEXT:    18     return Function(SomeLocal, 'a');
36 // CHECK-NEXT:    19   }
37 // CHECK-NEXT:    20
38 
39 // CHECK:      Process {{.*}} launched: '{{.*}}local-variables.cpp.tmp.exe'
40 // CHECK-NEXT: (lldb) p argc
41 // CHECK-NEXT: (int) $0 = 8
42 // CHECK-NEXT: (lldb) step
43 // CHECK-NEXT: Process {{.*}} stopped
44 // CHECK-NEXT: * thread #1, stop reason = step in
45 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`main(argc=8, argv={{.*}}) at local-variables.cpp:{{.*}}
46 // CHECK-NEXT:    15
47 // CHECK-NEXT:    16 int main(int argc, char **argv) {
48 // CHECK-NEXT:    17     int SomeLocal = argc * 2;
49 // CHECK-NEXT: -> 18     return Function(SomeLocal, 'a');
50 // CHECK-NEXT:    19 }
51 // CHECK-NEXT:    20
52 
53 // CHECK:      (lldb) p SomeLocal
54 // CHECK-NEXT: (int) $1 = 16
55 // CHECK-NEXT: (lldb) step
56 // CHECK-NEXT: Process {{.*}} stopped
57 // CHECK-NEXT: * thread #1, stop reason = step in
58 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
59 // CHECK-NEXT:    6
60 // CHECK-NEXT:    7
61 // CHECK-NEXT:    8 int Function(int Param1, char Param2) {
62 // CHECK-NEXT: -> 9      unsigned Local1 = Param1 + 1;
63 // CHECK-NEXT:    10     char Local2 = Param2 + 1;
64 // CHECK-NEXT:    11     ++Local1;
65 // CHECK-NEXT:    12     ++Local2;
66 
67 // CHECK:      (lldb) p Param1
68 // CHECK-NEXT: (int) $2 = 16
69 // CHECK-NEXT: (lldb) p Param2
70 // CHECK-NEXT: (char) $3 = 'a'
71 // CHECK-NEXT: (lldb) step
72 // CHECK-NEXT: Process {{.*}} stopped
73 // CHECK-NEXT: * thread #1, stop reason = step in
74 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
75 // CHECK-NEXT:    7
76 // CHECK-NEXT:    8    int Function(int Param1, char Param2) {
77 // CHECK-NEXT:    9      unsigned Local1 = Param1 + 1;
78 // CHECK-NEXT: -> 10     char Local2 = Param2 + 1;
79 // CHECK-NEXT:    11     ++Local1;
80 // CHECK-NEXT:    12     ++Local2;
81 // CHECK-NEXT:    13     return Local1;
82 
83 // CHECK:      (lldb) p Param1
84 // CHECK-NEXT: (int) $4 = 16
85 // CHECK-NEXT: (lldb) p Param2
86 // CHECK-NEXT: (char) $5 = 'a'
87 // CHECK-NEXT: (lldb) p Local1
88 // CHECK-NEXT: (unsigned int) $6 = 17
89 // CHECK-NEXT: (lldb) step
90 // CHECK-NEXT: Process {{.*}} stopped
91 // CHECK-NEXT: * thread #1, stop reason = step in
92 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
93 // CHECK-NEXT:    8    int Function(int Param1, char Param2) {
94 // CHECK-NEXT:    9      unsigned Local1 = Param1 + 1;
95 // CHECK-NEXT:    10     char Local2 = Param2 + 1;
96 // CHECK-NEXT: -> 11     ++Local1;
97 // CHECK-NEXT:    12     ++Local2;
98 // CHECK-NEXT:    13     return Local1;
99 // CHECK-NEXT:    14   }
100 
101 // CHECK:      (lldb) p Param1
102 // CHECK-NEXT: (int) $7 = 16
103 // CHECK-NEXT: (lldb) p Param2
104 // CHECK-NEXT: (char) $8 = 'a'
105 // CHECK-NEXT: (lldb) p Local1
106 // CHECK-NEXT: (unsigned int) $9 = 17
107 // CHECK-NEXT: (lldb) p Local2
108 // CHECK-NEXT: (char) $10 = 'b'
109 // CHECK-NEXT: (lldb) step
110 // CHECK-NEXT: Process {{.*}} stopped
111 // CHECK-NEXT: * thread #1, stop reason = step in
112 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
113 // CHECK-NEXT:    9      unsigned Local1 = Param1 + 1;
114 // CHECK-NEXT:    10     char Local2 = Param2 + 1;
115 // CHECK-NEXT:    11     ++Local1;
116 // CHECK-NEXT: -> 12     ++Local2;
117 // CHECK-NEXT:    13     return Local1;
118 // CHECK-NEXT:    14   }
119 // CHECK-NEXT:    15
120 
121 // CHECK:      (lldb) p Param1
122 // CHECK-NEXT: (int) $11 = 16
123 // CHECK-NEXT: (lldb) p Param2
124 // CHECK-NEXT: (char) $12 = 'a'
125 // CHECK-NEXT: (lldb) p Local1
126 // CHECK-NEXT: (unsigned int) $13 = 18
127 // CHECK-NEXT: (lldb) p Local2
128 // CHECK-NEXT: (char) $14 = 'b'
129 // CHECK-NEXT: (lldb) step
130 // CHECK-NEXT: Process {{.*}} stopped
131 // CHECK-NEXT: * thread #1, stop reason = step in
132 // CHECK-NEXT:     frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
133 // CHECK-NEXT:    10      char Local2 = Param2 + 1;
134 // CHECK-NEXT:    11     ++Local1;
135 // CHECK-NEXT:    12     ++Local2;
136 // CHECK-NEXT: -> 13     return Local1;
137 // CHECK-NEXT:    14   }
138 // CHECK-NEXT:    15
139 // CHECK-NEXT:    16   int main(int argc, char **argv) {
140 
141 // CHECK:      (lldb) p Param1
142 // CHECK-NEXT: (int) $15 = 16
143 // CHECK-NEXT: (lldb) p Param2
144 // CHECK-NEXT: (char) $16 = 'a'
145 // CHECK-NEXT: (lldb) p Local1
146 // CHECK-NEXT: (unsigned int) $17 = 18
147 // CHECK-NEXT: (lldb) p Local2
148 // CHECK-NEXT: (char) $18 = 'c'
149 // CHECK-NEXT: (lldb) continue
150 // CHECK-NEXT: Process {{.*}} resuming
151 // CHECK-NEXT: Process {{.*}} exited with status = 18 (0x00000012)
152 
153 // CHECK:      (lldb) target modules dump ast
154 // CHECK-NEXT: Dumping clang ast for {{.*}} modules.
155 // CHECK-NEXT: TranslationUnitDecl
156 // CHECK-NEXT: |-FunctionDecl {{.*}} main 'int (int, char **)'
157 // CHECK-NEXT: | |-ParmVarDecl {{.*}} argc 'int'
158 // CHECK-NEXT: | `-ParmVarDecl {{.*}} argv 'char **'
159 // CHECK-NEXT: `-FunctionDecl {{.*}} Function 'int (int, char)'
160 // CHECK-NEXT:   |-ParmVarDecl {{.*}} Param1 'int'
161 // CHECK-NEXT:   `-ParmVarDecl {{.*}} Param2 'char'
162