Add first tests for mini-dump debugging.

Differential Revision: http://reviews.llvm.org/D12888

llvm-svn: 247829
This commit is contained in:
Adrian McCarthy 2015-09-16 18:17:11 +00:00
parent c647a6df72
commit d9dbae599d
4 changed files with 77 additions and 0 deletions

View File

@ -0,0 +1,42 @@
"""
Test basics of mini dump debugging.
"""
import unittest2
import lldb
from lldbtest import *
import lldbutil
@skipUnlessWindows # for now mini-dump debugging is limited to Windows hosts
class MiniDumpTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
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.
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")
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()

View File

@ -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;
}

View File

@ -889,6 +889,10 @@ def skipIfHostWindows(func):
"""Decorate the item to skip tests that should be skipped on Windows.""" """Decorate the item to skip tests that should be skipped on Windows."""
return skipIfHostPlatform(["windows"])(func) 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): def skipUnlessDarwin(func):
"""Decorate the item to skip tests that should be skipped on any non Darwin platform.""" """Decorate the item to skip tests that should be skipped on any non Darwin platform."""
return skipUnlessPlatform(getDarwinOSTriples())(func) return skipUnlessPlatform(getDarwinOSTriples())(func)