我又一次编写了一个外部调试器可视化工具,结果遇到了麻烦。调试器可视化工具可以返回的字符串的大小似乎有限制。
Delphi2010附带的TStrings调试器可视化工具有4K的限制。在回答Embarcadero的新闻组上发布的一个问题时,Ewe Schuster replied说:“你可以稍微增加缓冲区,但实际上的限制是在IOTAThread.Evaluate中,限制为大约12k个字符。”
我的调试器可视化工具基于TStrings调试器可视化工具的代码,我可以看到TFrame的Evaluate方法的实现包括以下ResultStr声明,该声明用于返回从IOTAThread.Evaluate调用返回的字符串:
ResultStr: array[0..4095] of Char;
我曾希望增加此缓冲区的大小会有所帮助,但没有成功。
我可以做些什么来增加外部调试器可视化工具可以显示的字符串的大小?
发布于 2012-03-02 02:11:53
我对这个极限也有同样有限的耐心...因此,我制作了一个调试可视化工具,它主要通过在调试过程中创建一个MemoryStream来保存表达式的字符串结果,然后使用如下内容来绕过这个限制
CurProcess.ReadProcessMemory(StrToInt(SrcMemoryAddr), DstMemStream.Size, DstMemStream.Memory^);
将其复制到可视化工具的MemoryStream中。然后,您可以随心所欲地显示它(例如,如果它是像CLientDataSet.XMLData这样的XML字符串,则将其格式化以便于人类阅读)。
根据表达式是常量字符串、变量还是需要求值等,有几个技巧...
我的FGStringVisualizer不是100%令人满意,这就是为什么我还没有把它发布到我的博客上,但由于它完成了我需要的99%,我没有花时间清理它,甚至“按原样”发布它。但如果有需要,我当然可以用所有需要的免责声明来做……
更新:这和我在上一次DelphiLive上展示的FGStringListVisualizer的想法是一样的。顺便说一句,这篇文章可能也值得放在我的博客上,因为我后来做了一些改进。
https://stackoverflow.com/questions/9520847
复制相似问题