forked from OSchip/llvm-project
Add first tests for mini-dump debugging.
Differential Revision: http://reviews.llvm.org/D12888 llvm-svn: 247829
This commit is contained in:
parent
c647a6df72
commit
d9dbae599d
|
@ -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()
|
|
@ -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;
|
||||||
|
}
|
Binary file not shown.
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue