ide: PDB debugger BiVector/BiArray support

git-svn-id: svn://ultimatepp.org/upp/trunk@13708 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2019-11-23 09:52:37 +00:00
parent e2e408b333
commit 047e0811e9
3 changed files with 26 additions and 0 deletions

View file

@ -390,6 +390,8 @@ struct Pdb : Debugger, ParentCtrl {
void PrettyWString(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
void PrettyVector(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
void PrettyArray(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
void PrettyBiVector(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p);
void PrettyBiArray(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p);
void PrettyIndex(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);
void PrettyMap(Pretty& p, Pretty& key, Pretty& value);
void PrettyVectorMap(Val val, const Vector<String>& tparam, int64 from, int count, Pretty& p);

View file

@ -36,6 +36,19 @@ void Pdb::PrettyVector(Pdb::Val val, const Vector<String>& tparam, int64 from, i
p.data_ptr.Add(item.address + (i + from) * sz);
}
void Pdb::PrettyBiVector(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p)
{
p.data_count = GetInt64(GetAttr(val, "items"));
int start = GetInt(GetAttr(val, "items"));
int alloc = GetInt(GetAttr(val, "alloc"));
Val item = DeRef(GetAttr(val, "vector"));
int sz = SizeOfType(tparam[0]);
for(int i = 0; i < count; i++) {
int ii = i + start < alloc ? i + start : i + start - alloc;
p.data_ptr.Add(item.address + (ii + from) * sz);
}
}
void Pdb::PrettyIndex(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p)
{
return PrettyVector(GetAttr(val, "key"), tparam, from, count, p);
@ -48,6 +61,13 @@ void Pdb::PrettyArray(Pdb::Val val, const Vector<String>& tparam, int64 from, in
a = PeekPtr(a);
}
void Pdb::PrettyBiArray(Pdb::Val val, const Vector<String>& tparam, int64 from, int count, Pdb::Pretty& p)
{
PrettyBiVector(GetAttr(val, "bv"), { "int *" }, from, count, p);
for(adr_t& a : p.data_ptr)
a = PeekPtr(a);
}
void Pdb::PrettyMap(Pdb::Pretty& p, Pdb::Pretty& key, Pdb::Pretty& value)
{
p.data_count = min(key.data_count, value.data_count);
@ -234,7 +254,9 @@ bool Pdb::PrettyData(Visual& result, Pdb::Val val, dword flags)
pretty.Add("Upp::String", { 0, THISFN(PrettyString) });
pretty.Add("Upp::WString", { 0, THISFN(PrettyWString) });
pretty.Add("Upp::Vector", { 1, THISFN(PrettyVector) });
pretty.Add("Upp::BiVector", { 1, THISFN(PrettyBiVector) });
pretty.Add("Upp::Array", { 1, THISFN(PrettyArray) });
pretty.Add("Upp::BiArray", { 1, THISFN(PrettyBiArray) });
pretty.Add("Upp::Index", { 1, THISFN(PrettyIndex) });
pretty.Add("Upp::VectorMap", { 2, THISFN(PrettyVectorMap) });
pretty.Add("Upp::ArrayMap", { 2, THISFN(PrettyArrayMap) });

View file

@ -297,6 +297,8 @@ int Pdb::GetTypeIndex(adr_t modbase, dword typeindex)
const Pdb::Type& Pdb::GetType(int ti)
{
if(ti < 0 || ti >= type.GetCount())
ThrowError("Invalid type");
Type& t = type[ti];
int typeindex = type.GetKey(ti);
if(t.size < 0) {