This question already has an answer here:
How can I increase the size of the string that an external debugger visualizer can display?

(1个答案)


4年前关闭。





在下面的图片中,我在一个断点上循环遍历TString的(196)元素。当前索引是193。

可视化器仅显示17个元素。

可以对此做任何事情(除了专门检查元素“ x”以外)?

delphi - XE2中的Tstrings Visualizer仅显示17个项目-LMLPHP

最佳答案

据我所知,除了提交功能请求(如果成功,则进行升级)之外,您对此无能为力。我猜想,这就是像WarrenP所暗示的那样,被截断的是被馈送到可视化器的数据大小,而不是TStrings对象中特定的行数。这就是为什么我认为:

假设XE2带有与更高版本的XE相同的示例调试器可视化器,
可以尝试这样:


如果在IDE中安装了Embarcadero Sample Visualizers软件包,则将其卸载。
将StringListVisualizer.Pas单元复制到方便的位置。
创建一个新的.Dpk项目并将复制的StringListVisualizer.Pas添加到其
包含清单;它的“需求”列表应包括Rtl和DesignIDE。
打开复制的StringListVisualizer.Pas并找到例程

function TStringListViewerFrame.Evaluate(Expression: string): string;


您会看到其本地变量包括

  ResultStr: array[0..4095] of Char;


将4095更改为32767。这样做的目的是确保
由于此缓冲区的大小,Strings Visualizer的显示不会被截断,
根据WarrenP的评论。实际上,导致您
问题似乎在其他地方。


在StringListVisualizer.Pas中,将调试器断点放在行上

  case EvalRes of





      if not FDeferredError then


function TStringListViewerFrame.Evaluate(Expression: string): string中。

您需要2个断点,因为Evaluate有两种完成方法,
取决于EvalRes的值。它总是为我返回erDeferred。


编译并运行您的Dpk项目。它将调用IDE的第二个实例。
在第二种情况下,加载并运行问题项目。当您的断点跳闸时,请在“监视”窗口中右键单击并转到“可视化工具|可视化工具”。显示字符串。
不久,您在StringListVisualizer.Pas中的一个或另一个断点将跳闸
评估给您带来麻烦的字符串属性(可能会跳闸
首先要评估的其他几个表达式。如果这样做,则单步执行到将函数TStringListViewerFrame.Evaluate的结果赋值的位置,然后求值

Length(Result)




Copy(Result, Length(Result) - 100, Length(Result))


使用测试数据,我得到的Length(Result)值为4101,并且
复制将结果显示到字符串.text的最后一部分,即显示之前
在可视化器中被截断。

从这些结果(至少在我的情况下为ymmv)来看,似乎很清楚,数据截断发生在为可视化工具提供信息的调试器机器中,而不是可视化工具本身中。比我更了解调试器内部知识的人也许可以建议另一种将未截断的数据馈送到可视化器的方法。

更新:一些想法:


可视化工具可用的明显“ 4k”截断的变通办法可能是链接到正在调试功能的应用程序中,我们称其为TStringsPagedWindow(Input : TStsrings; Page : Integer) : String,它返回TStrings对象的一部分,希望可以解决“ 4k”问题限制,但需要在“监视窗口”中指定它的值而不是TStrings对象本身,并指定Page值。显然,这并不方便,并且需要将TStringsPagedWindow函数链接到正在调试的可执行文件中。
从1开始,看到调试器可视化程序显然可以评估任何有效的表达式,可以设想(在可视化程序中)基于要监视的TStrings变量的名称构造一个表达式,并自动调用TStringsPagedWindow来填充GUI对象可以显示其内容。这是我目前所能想到的最接近WarrenP的建议的“由于您可以编写自己的可视化工具,因此可以添加这样的箭头,并使用不同的控件来显示内容。”也许很多工作,但是我的乐趣观念;如果有兴趣的话,也许我会去。

关于delphi - XE2中的Tstrings Visualizer仅显示17个项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34548534/

10-11 22:56
查看更多