我再次编写了一个外部调试器可视化工具,并且遇到了问题.调试器可视化工具可以返回的字符串大小似乎有限制.
Delphi 2010附带的TStrings调试器可视化器的限制为4K.在对Embarcadero新闻组发布的问题的回复中,Ewe Schuster 回答说"你可以稍微增加缓冲区,但AFAIR的实际限制是IOTAThread.Evaluate,限制大约12k字符."
我的调试器可视化器基于TStrings调试器可视化器的代码,我可以看到TFrame的Evaluate方法的实现包括ResultStr的以下声明,该声明用于返回从IOTAThread.Evaluate调用返回的字符串:
ResultStr: array[0..4095] of Char;
Run Code Online (Sandbox Code Playgroud)
我曾希望增加这个缓冲区的大小会有所帮助,但没有运气.
如果有的话,我可以做些什么来增加外部调试器可视化工具可以显示的字符串的大小?
以下是我对此问题的回答:
事实证明,在D7和XE3之间的某个时刻,IDE的Watch Window的实现从使用TListView变为TVirtualStringTree.
虽然我发布了一个更新我的答案,通过忽略VST并从剪贴板获取监视值来使用XE4,我仍然希望能够从VST获得监视值,如果可以的话.一旦我引用了VST,我想我知道怎么做,但问题是我尝试获取VST失败了.
以下是我在自定义包中使用的代码的MCVE.希望它的作用是不言自明的.问题是块中的代码
if WatchWindow.Components[i] is TVirtualStringTree then begin
[...]
end;
Run Code Online (Sandbox Code Playgroud)
从不执行,DESOPITE出现在Memo1中的类名"TVirtualStringTree".显然,具有该类名的组件未通过"是"测试.我猜测的原因是编译到IDE中的TVirtualTreeView是一个与我正在使用的版本不同的版本,v.5.3.0,这是我能找到的最接近XE4的前身.
所以,我的问题是,这是可能的解释,我能做些什么吗?我怀疑是否有人可以通过帽子来繁荣用于XE4的TVirtualStringTree版本,这可能会解决我的问题.
type
TOtaMenuForm = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
WatchWindow : TForm;
VST : TVirtualStringTree;
end;
procedure TOtaMenuForm.FormCreate(Sender: TObject);
var
i : Integer;
S : String;
begin
WatchWindow := Nil;
VST := Nil;
// Iterate the IDE's forms to find the Watch Window
for i := 0 to Screen.FormCount - 1 do begin
S := Screen.Forms[i].Name;
if CompareText(S, 'WatchWindow') = 0 then begin …Run Code Online (Sandbox Code Playgroud)