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."""
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue