diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp index f711c41..072caed 100644 --- a/pykd/dbgext.cpp +++ b/pykd/dbgext.cpp @@ -157,6 +157,8 @@ BOOST_PYTHON_MODULE( pykd ) "Retrieves a flag of basic type for symbol") .def( "baseType", &pyDia::Symbol::getBaseType, "Retrieves the base type for this symbol") + .def( "bitPos", &pyDia::Symbol::getBitPosition, + "Retrieves the base type for this symbol") .def( "__str__", &pyDia::Symbol::print) .def("__getitem__", &pyDia::Symbol::getChildByName) .def("__len__", &pyDia::Symbol::getChildCount ) diff --git a/test/scripts/diatest.py b/test/scripts/diatest.py index 6697c55..b997ed7 100644 --- a/test/scripts/diatest.py +++ b/test/scripts/diatest.py @@ -59,4 +59,18 @@ class DiaTest( unittest.TestCase ): self.assertEqual(pykd.btBool, globalScope["g_constBoolValue"].type().baseType()) self.assertEqual(pykd.btULong, globalScope["g_ulongValue"].type().baseType()) - + def testBits(self): + globalScope = pykd.diaOpenPdb( str(target.module.pdb()) ) + structWithBits = globalScope["structWithBits"] + bitField = structWithBits["m_bit0_4"] + self.assertEqual(pykd.LocIsBitField, bitField.locType()) + self.assertEqual(0, bitField.bitPos()) + self.assertEqual(5, bitField.size()) + bitField = structWithBits["m_bit5"] + self.assertEqual(pykd.LocIsBitField, bitField.locType()) + self.assertEqual(5, bitField.bitPos()) + self.assertEqual(1, bitField.size()) + bitField = structWithBits["m_bit6_7"] + self.assertEqual(pykd.LocIsBitField, bitField.locType()) + self.assertEqual(6, bitField.bitPos()) + self.assertEqual(2, bitField.size()) diff --git a/test/targetapp/targetapp.cpp b/test/targetapp/targetapp.cpp index 00c395f..8a74f17 100644 --- a/test/targetapp/targetapp.cpp +++ b/test/targetapp/targetapp.cpp @@ -17,6 +17,13 @@ ULONGLONG g_ulonglongValue = 8; std::string g_string; +struct structWithBits { + ULONG m_bit0_4 : 5; + ULONG m_bit5 : 1; + ULONG m_bit6_7 : 2; +}; +structWithBits g_structWithBits = {0}; + void FuncWithName0() { }