如何增加外部调试器可视化工具可以显示的字符串大小?

时间:2012-03-01 17:19:41

标签: delphi delphi-2010 delphi-xe delphi-xe2 debuggervisualizer

我再次编写了一个外部调试器可视化工具,并且遇到了问题。调试器可视化工具可以返回的字符串大小似乎有限制。

Delphi 2010附带的TStrings调试器可视化器的限制为4K。在对Embarcadero新闻组发布的问题的回复中,Ewe Schuster replied表示“你可以稍微增加缓冲区,但AFAIR的实际限制是在IOTAThread.Evaluate中,限制大约12k字符。”

我的调试器可视化工具基于TStrings调试器可视化工具的代码,我可以看到TFrame的Evaluate方法的实现包括ResultStr的以下声明,该声明用于返回从IOTAThread.Evaluate调用返回的字符串:

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

我原本希望增加这个缓冲区的大小会有所帮助,但没有运气。

如果有的话,我可以做些什么来增加外部调试器可视化工具可以显示的字符串的大小?

1 个答案:

答案 0 :(得分:11)

我对这个限制有同样的耐心...... 所以我制作了一个调试可视化工具,主要通过在调试过程中创建一个MemoryStream来保存Expression的字符串结果,然后使用像

这样的东西来解决这个问题。
CurProcess.ReadProcessMemory(StrToInt(SrcMemoryAddr), DstMemStream.Size, DstMemStream.Memory^);

将其复制到可视化工具的MemoryStream中。然后你可以做你想要显示的任何事情(例如,如果它是像CLientDataSet.XMLData这样的XML字符串,则将其格式化为人类阅读。)

根据Expression是一个const字符串,一个var,还是需要评估等等,几乎没有什么技巧......

我的FGStringVisualizer不是100%令人满意,这就是为什么我还没有在我的博客上发布它,但因为它占我所需要的99%,我没有花时间来清理它并发布它甚至“按原样”。但如果有需要,我当然可以用所有需要的免责声明做到这一点......

更新: 这与我在最后一个DelphiLive中提供的FGStringListVisualizer使用的想法相同。顺便说一句,这个也可能值得我放在我的博客上,因为我做了一些改进。