[Lldb-commits] [lldb] r355570 - [Reproducers] Add tests for different types of functionality

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 6 16:24:44 PST 2019


Author: jdevlieghere
Date: Wed Mar  6 16:24:44 2019
New Revision: 355570

URL: http://llvm.org/viewvc/llvm-project?rev=355570&view=rev
Log:
[Reproducers] Add tests for different types of functionality

This patch adds test that check that functionality in lldb continues to
work when replaying a reproducer.

 - Entries in image list are identical.
 - That stepping behaves the same.
 - That the data formatters behave the same.

Differential revision: https://reviews.llvm.org/D55626

Added:
    lldb/trunk/lit/Reproducer/Functionalities/
    lldb/trunk/lit/Reproducer/Functionalities/Inputs/
    lldb/trunk/lit/Reproducer/Functionalities/Inputs/DataFormatter.in
    lldb/trunk/lit/Reproducer/Functionalities/Inputs/foo.cpp
    lldb/trunk/lit/Reproducer/Functionalities/Inputs/stepping.c
    lldb/trunk/lit/Reproducer/Functionalities/TestDataFormatter.test
    lldb/trunk/lit/Reproducer/Functionalities/TestImagineList.test
    lldb/trunk/lit/Reproducer/Functionalities/TestStepping.test

Added: lldb/trunk/lit/Reproducer/Functionalities/Inputs/DataFormatter.in
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/Functionalities/Inputs/DataFormatter.in?rev=355570&view=auto
==============================================================================
--- lldb/trunk/lit/Reproducer/Functionalities/Inputs/DataFormatter.in (added)
+++ lldb/trunk/lit/Reproducer/Functionalities/Inputs/DataFormatter.in Wed Mar  6 16:24:44 2019
@@ -0,0 +1,7 @@
+breakpoint set -f foo.cpp -l 11
+run
+frame var
+next
+frame var
+cont
+reproducer generate

Added: lldb/trunk/lit/Reproducer/Functionalities/Inputs/foo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/Functionalities/Inputs/foo.cpp?rev=355570&view=auto
==============================================================================
--- lldb/trunk/lit/Reproducer/Functionalities/Inputs/foo.cpp (added)
+++ lldb/trunk/lit/Reproducer/Functionalities/Inputs/foo.cpp Wed Mar  6 16:24:44 2019
@@ -0,0 +1,13 @@
+class Foo {
+public:
+  Foo(int i, double d) : m_i(i), m_d(d){};
+
+private:
+  int m_i;
+  int m_d;
+};
+
+int main(int argc, char **argv) {
+  Foo foo(1, 2.22);
+  return 0;
+}

Added: lldb/trunk/lit/Reproducer/Functionalities/Inputs/stepping.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/Functionalities/Inputs/stepping.c?rev=355570&view=auto
==============================================================================
--- lldb/trunk/lit/Reproducer/Functionalities/Inputs/stepping.c (added)
+++ lldb/trunk/lit/Reproducer/Functionalities/Inputs/stepping.c Wed Mar  6 16:24:44 2019
@@ -0,0 +1,37 @@
+int a(int);
+int b(int);
+int c(int);
+int complex(int, int, int);
+
+int a(int val) {
+  int return_value = val;
+
+  if (val <= 1) {
+    return_value = b(val);
+  } else if (val >= 3) {
+    return_value = c(val);
+  }
+
+  return return_value;
+}
+
+int b(int val) {
+  int rc = c(val);
+  return rc;
+}
+
+int c(int val) { return val + 3; }
+
+int complex(int first, int second, int third) { return first + second + third; }
+
+int main(int argc, char const *argv[]) {
+  int A1 = a(1);
+
+  int B2 = b(2);
+
+  int A3 = a(3);
+
+  int A4 = complex(a(1), b(2), c(3));
+
+  return 0;
+}

Added: lldb/trunk/lit/Reproducer/Functionalities/TestDataFormatter.test
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/Functionalities/TestDataFormatter.test?rev=355570&view=auto
==============================================================================
--- lldb/trunk/lit/Reproducer/Functionalities/TestDataFormatter.test (added)
+++ lldb/trunk/lit/Reproducer/Functionalities/TestDataFormatter.test Wed Mar  6 16:24:44 2019
@@ -0,0 +1,16 @@
+# UNSUPPORTED: system-windows, system-freebsd
+
+# This tests that data formatters continue to work when replaying a reproducer.
+
+# RUN: rm -rf %t.repro
+# RUN: %clang %S/Inputs/foo.cpp -g -o %t.out
+
+# RUN: %lldb -x -b -s %S/Inputs/DataFormatter.in --capture %t.repro %t.out | FileCheck %s
+# RUN: %lldb --replay %t.repro | FileCheck %s
+
+# CHECK: stop reason = breakpoint 1.1
+# CHECK: (Foo) foo = (m_i = 0, m_d = 0)
+# CHECK: stop reason = step over
+# CHECK: (Foo) foo = (m_i = 1, m_d = 2)
+# CHECK: Process {{.*}} resuming
+# CHECK: Process {{.*}} exited with status = 0

Added: lldb/trunk/lit/Reproducer/Functionalities/TestImagineList.test
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/Functionalities/TestImagineList.test?rev=355570&view=auto
==============================================================================
--- lldb/trunk/lit/Reproducer/Functionalities/TestImagineList.test (added)
+++ lldb/trunk/lit/Reproducer/Functionalities/TestImagineList.test Wed Mar  6 16:24:44 2019
@@ -0,0 +1,29 @@
+# UNSUPPORTED: system-windows, system-freebsd
+
+# This tests that image list works when replaying. We arbitrarily assume
+# there's at least two entries and compare that they're identical.
+
+# RUN: %clang %S/Inputs/stepping.c -g -o %t.out
+
+# RUN: rm -rf %t.txt
+
+# RUN: echo "CAPTURE" >> %t.txt
+# RUN: %lldb -x -b  --capture %t.repro \
+# RUN:    -o 'image list' \
+# RUN:    -o 'reproducer generate' \
+# RUN:    %t.out >> %t.txt 2>&1
+
+# RUN: echo "REPLAY" >> %t.txt
+# RUN: %lldb -x -b --replay %t.repro >> %t.txt 2>&1
+
+# RUN: cat %t.txt | FileCheck %s
+
+# CHECK: CAPTURE
+# CHECK: image list
+# CHECK: [  0] [[ZERO:.*]]
+# CHECK: [  1] [[ONE:.*]]
+
+# CHECK: REPLAY
+# CHECK: image list
+# CHECK: [  0] {{.*}}[[ZERO]]
+# CHECK: [  1] {{.*}}[[ONE]]

Added: lldb/trunk/lit/Reproducer/Functionalities/TestStepping.test
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/Functionalities/TestStepping.test?rev=355570&view=auto
==============================================================================
--- lldb/trunk/lit/Reproducer/Functionalities/TestStepping.test (added)
+++ lldb/trunk/lit/Reproducer/Functionalities/TestStepping.test Wed Mar  6 16:24:44 2019
@@ -0,0 +1,99 @@
+# UNSUPPORTED: system-windows, system-freebsd
+
+# This tests that stepping continues to work when replaying a reproducer.
+
+# RUN: %clang %S/Inputs/stepping.c -O0 -g -o %t.out
+# RUN: grep -v '#' %s > %t.in
+
+# RUN: %lldb -x -b -s %t.in --capture %t.repro %t.out | FileCheck %s --check-prefix CHECK
+# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK
+
+# Set breakpoints in a,b and c and verify we stop there when stepping.
+
+breakpoint set -f stepping.c -l 28
+# CHECK: Breakpoint 1: {{.*}} stepping.c:28
+
+breakpoint set -f stepping.c -l 10
+# CHECK: Breakpoint 2: {{.*}} stepping.c:10
+
+breakpoint set -f stepping.c -l 19
+# CHECK: Breakpoint 3: {{.*}} stepping.c:19
+
+breakpoint set -f stepping.c -l 23
+# CHECK: Breakpoint 4: {{.*}} stepping.c:23
+
+run
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = breakpoint 1.1
+
+next
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = breakpoint 2.1
+
+next
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = breakpoint 3.1
+
+next
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = breakpoint 4.1
+
+bt
+# CHECK: frame #0: {{.*}}`c
+# CHECK: frame #1: {{.*}}`b
+# CHECK: frame #2: {{.*}}`a
+
+# Continue and stop resulting from the step overs.
+
+cont
+# CHECK: Process {{.*}} resuming
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = step over
+cont
+# CHECK: Process {{.*}} resuming
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = step over
+cont
+# CHECK: Process {{.*}} resuming
+# CHECK: Process {{.*}} stopped
+# CHECK: stop reason = step over
+
+breakpoint disable 1
+# CHECK: 1 breakpoints disabled.
+
+breakpoint disable 2
+# CHECK: 1 breakpoints disabled.
+
+breakpoint disable 3
+# CHECK: 1 breakpoints disabled.
+
+breakpoint disable 4
+# CHECK: 1 breakpoints disabled.
+
+# Continue to line 48.
+
+next
+# CHECK: stop reason = step over
+next
+# CHECK: stop reason = step over
+
+# Step into c.
+thread step-in
+# CHECK: stop reason = step in
+thread step-in
+# CHECK: stop reason = step in
+thread step-in
+# CHECK: stop reason = step in
+thread step-in
+# CHECK: stop reason = step in
+thread step-in
+# CHECK: stop reason = step in
+
+# Finally continue until the end.
+
+cont
+# CHECK: Process {{.*}} resuming
+# CHECK: Process {{.*}} exited with status = 0
+
+# Generate the reproducer.
+reproducer generate




More information about the lldb-commits mailing list