amccarth created this revision.
amccarth added a reviewer: zturner.
amccarth added a subscriber: lldb-commits.

This includes a dump file captured using Visual Studio, of the enclosed sample 
program, which was also build with Visual Studio.

The tests just verify that LLDB can access some very basic information from the 
mini-dump.

http://reviews.llvm.org/D12888

Files:
  test/functionalities/minidump/TestMiniDump.py
  test/functionalities/minidump/fizzbuzz.cpp
  test/functionalities/minidump/fizzbuzz_no_heap.dmp
  test/lldbtest.py

Index: test/lldbtest.py
===================================================================
--- test/lldbtest.py
+++ test/lldbtest.py
@@ -889,6 +889,10 @@
     """Decorate the item to skip tests that should be skipped on Windows."""
     return skipIfHostPlatform(["windows"])(func)
 
+def skipUnlessWindows(func):
+    """Decorate the item to skip tests that should be skipped on any non-Windows platform."""
+    return skipUnlessPlatform(["windows"])(func)
+
 def skipUnlessDarwin(func):
     """Decorate the item to skip tests that should be skipped on any non Darwin platform."""
     return skipUnlessPlatform(getDarwinOSTriples())(func)
Index: test/functionalities/minidump/fizzbuzz.cpp
===================================================================
--- /dev/null
+++ test/functionalities/minidump/fizzbuzz.cpp
@@ -0,0 +1,31 @@
+// A sample program for getting minidumps on Windows.
+
+#include <iostream>
+
+bool
+fizz(int x)
+{
+    return x % 3 == 0;
+}
+
+bool
+buzz(int x)
+{
+    return x % 5 == 0;
+}
+
+int
+main()
+{
+    int *buggy = 0;
+
+    for (int i = 1; i <= 100; ++i)
+    {
+        if (fizz(i)) std::cout << "fizz";
+        if (buzz(i)) std::cout << "buzz";
+        if (!fizz(i) && !buzz(i)) std::cout << i;
+        std::cout << '\n';
+    }
+
+    return *buggy;
+}
Index: test/functionalities/minidump/TestMiniDump.py
===================================================================
--- /dev/null
+++ test/functionalities/minidump/TestMiniDump.py
@@ -0,0 +1,47 @@
+"""
+Test basics of mini dump debugging.
+"""
+
+import unittest2
+import lldb
+from lldbtest import *
+import lldbutil
+
+class MiniDumpTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @skipUnlessWindows  # for now mini-dump debugging is limited to Windows hosts
+    def test_process_info_in_mini_dump(self):
+        """Test that lldb can read the process information from the minidump."""
+        self.assertTrue(self.process, PROCESS_IS_VALID)
+        self.assertEqual(self.process.GetNumThreads(), 1)
+        # TODO(amccarth):  Check the process ID.
+
+    @skipUnlessWindows  # for now mini-dump debugging is limited to Windows hosts
+    def test_thread_info_in_mini_dump(self):
+        """Test that lldb can read the thread information from the minidump."""
+        # This process crashed due to an access violation (0xc0000005) in its one and only thread.
+        self.assertEqual(self.process.GetNumThreads(), 1)
+        thread = self.process.GetThreadAtIndex(0)
+        self.assertEqual(thread.GetStopReason(), lldb.eStopReasonException)
+        stop_description = thread.GetStopDescription(256);
+        self.assertTrue("0xc0000005" in stop_description);
+
+    def setUp(self):
+        # Call super's setUp().
+        TestBase.setUp(self)
+        # target create -c fizzbuzz_no_heap.dmp
+        self.dbg.CreateTarget("")
+        self.target = self.dbg.GetSelectedTarget()
+        self.process = self.target.LoadCore("fizzbuzz_no_heap.dmp")
+
+    def tearDown(self):
+        # Call super's tearDown().
+        TestBase.tearDown(self)
+
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to