| // clang-format off | |
| // REQUIRES: target-windows | |
| // RUN: %build -o %t.exe -- %s | |
| // RUN: %lldb -f %t.exe -s \ | |
| // RUN: %p/Inputs/local-variables.lldbinit 2>&1 | FileCheck %s | |
| int Function(int Param1, char Param2) { | |
| unsigned Local1 = Param1 + 1; | |
| char Local2 = Param2 + 1; | |
| ++Local1; | |
| ++Local2; | |
| return Local1; | |
| } | |
| int main(int argc, char **argv) { | |
| int SomeLocal = argc * 2; | |
| return Function(SomeLocal, 'a'); | |
| } | |
| // CHECK: (lldb) target create "{{.*}}local-variables.cpp.tmp.exe" | |
| // CHECK-NEXT: Current executable set to '{{.*}}local-variables.cpp.tmp.exe' | |
| // CHECK-NEXT: (lldb) command source -s 0 '{{.*}}local-variables.lldbinit' | |
| // CHECK-NEXT: Executing commands in '{{.*}}local-variables.lldbinit'. | |
| // CHECK-NEXT: (lldb) break set -f local-variables.cpp -l 17 | |
| // CHECK-NEXT: Breakpoint 1: where = local-variables.cpp.tmp.exe`main + {{.*}} at local-variables.cpp:{{.*}}, address = {{.*}} | |
| // CHECK-NEXT: (lldb) run a b c d e f g | |
| // CHECK-NEXT: Process {{.*}} launched: '{{.*}}local-variables.cpp.tmp.exe' | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = breakpoint 1.1 | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`main(argc=8, argv={{.*}}) at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 14 } | |
| // CHECK-NEXT: 15 | |
| // CHECK-NEXT: 16 int main(int argc, char **argv) { | |
| // CHECK-NEXT: -> 17 int SomeLocal = argc * 2; | |
| // CHECK-NEXT: 18 return Function(SomeLocal, 'a'); | |
| // CHECK-NEXT: 19 } | |
| // CHECK-NEXT: 20 | |
| // CHECK: (lldb) expression argc | |
| // CHECK-NEXT: (int) $0 = 8 | |
| // CHECK-NEXT: (lldb) step | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = step in | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`main(argc=8, argv={{.*}}) at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 15 | |
| // CHECK-NEXT: 16 int main(int argc, char **argv) { | |
| // CHECK-NEXT: 17 int SomeLocal = argc * 2; | |
| // CHECK-NEXT: -> 18 return Function(SomeLocal, 'a'); | |
| // CHECK-NEXT: 19 } | |
| // CHECK-NEXT: 20 | |
| // CHECK: (lldb) expression SomeLocal | |
| // CHECK-NEXT: (int) $1 = 16 | |
| // CHECK-NEXT: (lldb) step | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = step in | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`int Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 6 | |
| // CHECK-NEXT: 7 | |
| // CHECK-NEXT: 8 int Function(int Param1, char Param2) { | |
| // CHECK-NEXT: -> 9 unsigned Local1 = Param1 + 1; | |
| // CHECK-NEXT: 10 char Local2 = Param2 + 1; | |
| // CHECK-NEXT: 11 ++Local1; | |
| // CHECK-NEXT: 12 ++Local2; | |
| // CHECK: (lldb) expression Param1 | |
| // CHECK-NEXT: (int) $2 = 16 | |
| // CHECK-NEXT: (lldb) expression Param2 | |
| // CHECK-NEXT: (char) $3 = 'a' | |
| // CHECK-NEXT: (lldb) step | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = step in | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`int Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 7 | |
| // CHECK-NEXT: 8 int Function(int Param1, char Param2) { | |
| // CHECK-NEXT: 9 unsigned Local1 = Param1 + 1; | |
| // CHECK-NEXT: -> 10 char Local2 = Param2 + 1; | |
| // CHECK-NEXT: 11 ++Local1; | |
| // CHECK-NEXT: 12 ++Local2; | |
| // CHECK-NEXT: 13 return Local1; | |
| // CHECK: (lldb) expression Param1 | |
| // CHECK-NEXT: (int) $4 = 16 | |
| // CHECK-NEXT: (lldb) expression Param2 | |
| // CHECK-NEXT: (char) $5 = 'a' | |
| // CHECK-NEXT: (lldb) expression Local1 | |
| // CHECK-NEXT: (unsigned int) $6 = 17 | |
| // CHECK-NEXT: (lldb) step | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = step in | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`int Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 8 int Function(int Param1, char Param2) { | |
| // CHECK-NEXT: 9 unsigned Local1 = Param1 + 1; | |
| // CHECK-NEXT: 10 char Local2 = Param2 + 1; | |
| // CHECK-NEXT: -> 11 ++Local1; | |
| // CHECK-NEXT: 12 ++Local2; | |
| // CHECK-NEXT: 13 return Local1; | |
| // CHECK-NEXT: 14 } | |
| // CHECK: (lldb) expression Param1 | |
| // CHECK-NEXT: (int) $7 = 16 | |
| // CHECK-NEXT: (lldb) expression Param2 | |
| // CHECK-NEXT: (char) $8 = 'a' | |
| // CHECK-NEXT: (lldb) expression Local1 | |
| // CHECK-NEXT: (unsigned int) $9 = 17 | |
| // CHECK-NEXT: (lldb) expression Local2 | |
| // CHECK-NEXT: (char) $10 = 'b' | |
| // CHECK-NEXT: (lldb) step | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = step in | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`int Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 9 unsigned Local1 = Param1 + 1; | |
| // CHECK-NEXT: 10 char Local2 = Param2 + 1; | |
| // CHECK-NEXT: 11 ++Local1; | |
| // CHECK-NEXT: -> 12 ++Local2; | |
| // CHECK-NEXT: 13 return Local1; | |
| // CHECK-NEXT: 14 } | |
| // CHECK-NEXT: 15 | |
| // CHECK: (lldb) expression Param1 | |
| // CHECK-NEXT: (int) $11 = 16 | |
| // CHECK-NEXT: (lldb) expression Param2 | |
| // CHECK-NEXT: (char) $12 = 'a' | |
| // CHECK-NEXT: (lldb) expression Local1 | |
| // CHECK-NEXT: (unsigned int) $13 = 18 | |
| // CHECK-NEXT: (lldb) expression Local2 | |
| // CHECK-NEXT: (char) $14 = 'b' | |
| // CHECK-NEXT: (lldb) step | |
| // CHECK-NEXT: Process {{.*}} stopped | |
| // CHECK-NEXT: * thread #1, stop reason = step in | |
| // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`int Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}} | |
| // CHECK-NEXT: 10 char Local2 = Param2 + 1; | |
| // CHECK-NEXT: 11 ++Local1; | |
| // CHECK-NEXT: 12 ++Local2; | |
| // CHECK-NEXT: -> 13 return Local1; | |
| // CHECK-NEXT: 14 } | |
| // CHECK-NEXT: 15 | |
| // CHECK-NEXT: 16 int main(int argc, char **argv) { | |
| // CHECK: (lldb) expression Param1 | |
| // CHECK-NEXT: (int) $15 = 16 | |
| // CHECK-NEXT: (lldb) expression Param2 | |
| // CHECK-NEXT: (char) $16 = 'a' | |
| // CHECK-NEXT: (lldb) expression Local1 | |
| // CHECK-NEXT: (unsigned int) $17 = 18 | |
| // CHECK-NEXT: (lldb) expression Local2 | |
| // CHECK-NEXT: (char) $18 = 'c' | |
| // CHECK-NEXT: (lldb) continue | |
| // CHECK: Process {{.*}} resuming | |
| // CHECK-NEXT: Process {{.*}} exited with status = 18 (0x00000012) | |
| // CHECK: (lldb) target modules dump ast | |
| // CHECK: Dumping clang ast for {{.*}} modules. | |
| // CHECK-NEXT: TranslationUnitDecl | |
| // CHECK-NEXT: |-FunctionDecl {{.*}} main 'int (int, char **)' | |
| // CHECK-NEXT: | |-ParmVarDecl {{.*}} argc 'int' | |
| // CHECK-NEXT: | `-ParmVarDecl {{.*}} argv 'char **' | |
| // CHECK-NEXT: |-FunctionDecl {{.*}} __scrt_common_main_seh 'int ()' static | |
| // CHECK-NEXT: |-FunctionDecl {{.*}} invoke_main 'int ()' inline | |
| // CHECK: `-FunctionDecl {{.*}} Function 'int (int, char)' | |
| // CHECK-NEXT: |-ParmVarDecl {{.*}} Param1 'int' | |
| // CHECK-NEXT: `-ParmVarDecl {{.*}} Param2 'char' |