diff --git a/uppsrc/ide/Debuggers/Code.cpp b/uppsrc/ide/Debuggers/Code.cpp index 40b717ea5..331ed9f64 100644 --- a/uppsrc/ide/Debuggers/Code.cpp +++ b/uppsrc/ide/Debuggers/Code.cpp @@ -84,7 +84,7 @@ void Pdb::Sync0() for(int i = 0; i < f.param.GetCount(); i++) { if(i) r << ", "; - r << f.param.GetKey(i) << "=" << Visualise(f.param[i], 30).GetString(); + r << f.param.GetKey(i) << "=" << Visualise(f.param[i]).GetString(); } r << ')'; if(c < 0) diff --git a/uppsrc/ide/Debuggers/Data.cpp b/uppsrc/ide/Debuggers/Data.cpp index 397b24685..01dd2b536 100644 --- a/uppsrc/ide/Debuggers/Data.cpp +++ b/uppsrc/ide/Debuggers/Data.cpp @@ -186,7 +186,7 @@ void Pdb::TryAuto(const String& exp, const VectorMap& prev) try { CParser p(exp); Val v = Exp(p); - Visualise(r, v, 2, 20); + Visualise(r, v, 2); } catch(CParser::Error) { r.Clear(); diff --git a/uppsrc/ide/Debuggers/Pdb.h b/uppsrc/ide/Debuggers/Pdb.h index 6ab80ce40..0c8aee4d3 100644 --- a/uppsrc/ide/Debuggers/Pdb.h +++ b/uppsrc/ide/Debuggers/Pdb.h @@ -268,9 +268,10 @@ struct Pdb : Debugger, ParentCtrl { Val Multiplicative(CParser& p); Val Exp0(CParser& p); Val Exp(CParser& p); - void Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int maxlen = 250); - Visual Visualise(Val v, int maxlen = 250); - Visual Visualise(const String& rexp, int maxlen = 250); + void Visualise(Visual& result, Pdb::Val val, int expandptr, int slen); + void Visualise(Visual& result, Pdb::Val val, int expandptr); + Visual Visualise(Val v); + Visual Visualise(const String& rexp); // code int Disassemble(adr_t ip); diff --git a/uppsrc/ide/Debuggers/Visualise.cpp b/uppsrc/ide/Debuggers/Visualise.cpp index ffe77fb25..7d6221c72 100644 --- a/uppsrc/ide/Debuggers/Visualise.cpp +++ b/uppsrc/ide/Debuggers/Visualise.cpp @@ -48,8 +48,9 @@ bool IsOk(const String& q) return true; } -void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int maxlen) +void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen) { + const int maxlen = 300; if(result.length > maxlen) return; if(val.ref > 0 || val.type < 0) @@ -62,7 +63,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m else { String x = ReadString(val.address, slen + 1); String dt; - if(x.GetLength() > (IsOk(x) ? slen : 20)) { + if(x.GetLength() > slen) { x.Trim(x.GetLength() - 1); dt = ".."; } @@ -73,7 +74,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m } if(expandptr > 0 && (val.type != UNKNOWN || val.ref > 1) && val.address) { result.Cat("->", SColorMark); - Visualise(result, DeRef(val), expandptr - 1, slen, maxlen); + Visualise(result, DeRef(val), expandptr - 1, slen); } return; } @@ -126,7 +127,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m Val r = t.member[i]; r.address += val.address; try { - Visualise(result, r, max(expandptr - 1, 0), 32, maxlen); + Visualise(result, r, max(expandptr - 1, 0), slen); } catch(CParser::Error e) { result.Cat(e, SColorDisabled); @@ -143,7 +144,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m result.Cat(t.static_member.GetKey(i)); result.Cat("=", SColorMark); try { - Visualise(result, t.static_member[i], max(expandptr - 1, 0), 32, maxlen); + Visualise(result, t.static_member[i], max(expandptr - 1, 0), slen); } catch(CParser::Error e) { result.Cat(e, SColorDisabled); @@ -167,7 +168,7 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m Val r = t.member[i]; r.address += adr; try { - Visualise(result, r, max(expandptr - 1, 0), 32, maxlen); + Visualise(result, r, max(expandptr - 1, 0), slen); } catch(CParser::Error e) { result.Cat(e, SColorDisabled); @@ -178,11 +179,33 @@ void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr, int slen, int m result.Cat(" }", SColorMark); } -Pdb::Visual Pdb::Visualise(Val v, int maxlen) +void Pdb::Visualise(Visual& result, Pdb::Val val, int expandptr) +{ + int cx = autos.HeaderObject().GetTabWidth(1); + int l = 30; + int h = 300; + for(int i = 0; i < 8; i++) { + int slen = (l + h) / 2; + result.length = 0; + result.part.Clear(); + Visualise(result, val, expandptr, slen); + int x = 0; + for(int i = 0; i < result.part.GetCount(); i++) + x += GetTextSize(result.part[i].text, StdFont()).cx; + if(x < cx) + l = slen; + else + h = slen; + if(l + 1 >= h) + break; + } +} + +Pdb::Visual Pdb::Visualise(Val v) { Visual r; try { - Visualise(r, v, 2, 150, maxlen); + Visualise(r, v, 2); } catch(CParser::Error e) { r.Cat(e, SColorDisabled); @@ -190,13 +213,13 @@ Pdb::Visual Pdb::Visualise(Val v, int maxlen) return r; } -Pdb::Visual Pdb::Visualise(const String& exp, int maxlen) +Pdb::Visual Pdb::Visualise(const String& exp) { Visual r; try { CParser p(exp); Val v = Exp(p); - Visualise(r, v, 2, 150, maxlen); + Visualise(r, v, 2); } catch(CParser::Error e) { r.Cat(e, SColorDisabled);