15

我再次编写了一个外部调试器可视化器,并且正在碰壁。调试器可视化器可以返回的字符串大小似乎有限制。

Delphi 2010 附带的 TStrings 调试器可视化工具有 4K 的限制。在回答发布在 Embarcadero 新闻组上的问题时,Ewe Schuster回答说:“您可以稍微增加缓冲区,但 AFAIR 实际限制在 IOTAThread.Evaluate 中,限制约为 12k 字符。”

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

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

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

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

4

1 回答 1

12

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

CurProcess.ReadProcessMemory(StrToInt(SrcMemoryAddr), DstMemStream.Size, DstMemStream.Memory^);

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

取决于表达式是 const 字符串、var 还是需要评估等,有一些技巧......

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

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

于 2012-03-01T18:11:52.680 回答