mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
""" File: BeefyLLDB.py """
|
|
import lldb
|
|
import shlex
|
|
|
|
class BFArraySyntheticChildrenProvider:
|
|
def __init__(self, valobj, internal_dict):
|
|
#print "Var: " + valobj.GetName()
|
|
self.startIdx = 1
|
|
self.obj = valobj
|
|
self.update()
|
|
def update(self):
|
|
self.length = self.obj.GetChildMemberWithName("mLength")
|
|
self.firstElement = self.obj.GetChildMemberWithName("mFirstElement")
|
|
self.dataType = self.firstElement.GetType()
|
|
def num_children(self):
|
|
return min(1024, self.length.GetValueAsSigned()) + self.startIdx;
|
|
def get_child_index(self,name):
|
|
if (name == "mLength"):
|
|
return 0;
|
|
try:
|
|
return int(name.lstrip('[').rstrip(']')) + self.startIdx
|
|
except:
|
|
return -1
|
|
def get_child_at_index(self,index):
|
|
if index < 0:
|
|
return None;
|
|
if index >= self.num_children():
|
|
return None;
|
|
|
|
if (index == 0):
|
|
return self.length;
|
|
|
|
offset = (index - self.startIdx) * self.dataType.GetByteSize()
|
|
return self.firstElement.AddressOf().CreateChildAtOffset('['+str(index - self.startIdx)+']', offset, self.dataType)
|
|
|
|
def has_children(self):
|
|
return True
|
|
|
|
def StringSummaryProvider(valobj, dict):
|
|
e = lldb.SBError()
|
|
s = u'"'
|
|
|
|
if valobj.GetValue() != 0:
|
|
strObj = valobj.GetChildMemberWithName("start_char")
|
|
len = valobj.GetChildMemberWithName("length").GetValueAsSigned()
|
|
|
|
i = 0
|
|
newchar = -1
|
|
ptrType = strObj.GetType().GetPointerType()
|
|
|
|
for i in range(0, min(8192, len)):
|
|
data_val = strObj.CreateChildAtOffset('['+str(i)+']', i*2, strObj.GetType())
|
|
newchar = data_val.GetValueAsUnsigned()
|
|
i = i + 1
|
|
|
|
if newchar != 0:
|
|
s = s + unichr(newchar)
|
|
s = s + u'"'
|
|
return s.encode('utf-8')
|
|
|
|
def __lldb_init_module(debugger,dict):
|
|
print "InitModule"
|
|
debugger.HandleCommand('type summary add --expand -x "BFArray1<" -summary-string "len = ${var.mLength}"')
|
|
debugger.HandleCommand('type synthetic add -x "BFArray1<" -l BeefyLLDB.BFArraySyntheticChildrenProvider')
|
|
debugger.HandleCommand('type summary add "BFType" -summary-string "${var.mDebugTypeData->mName}@${var.mDebugTypeData->mNamespace}"')
|
|
debugger.HandleCommand('type summary add "BFTypeRoot" -summary-string "${var.mDebugTypeData->mName}@${var.mDebugTypeData->mNamespace}"')
|
|
debugger.HandleCommand('type summary add "System::String" -F BeefyLLDB.StringSummaryProvider')
|