问题
I am once again writing an external debugger visualizer, and am running into a wall. There appears to be a limit to the size of the string that the debugger visualizer can return.
The TStrings debugger visualizer that shipped with Delphi 2010 had a limit of 4K. In a response to a question posted on Embarcadero's newsgroups, Ewe Schuster replied that "You can increase the buffer a little bit, but AFAIR the actual limitation is in IOTAThread.Evaluate with a limit of about 12k chars."
My debugger visualizer is based on the code of the TStrings debugger visualizer, and I can see that the implementation of the TFrame's Evaluate method includes the following declaration of ResultStr, which is used to return the string returned from the IOTAThread.Evaluate call:
ResultStr: array[0..4095] of Char;
I had hoped that increasing the size of this buffer would help, but no luck.
What can I do, if anything, to increase the size of the string that my external debugger visualizer can display?
回答1:
I had the same limited patience for that limit... So I made a debug visualizer that work around the limitation mostly by creating a MemoryStream in the debugged process to hold the string result of the Expression, then use something like
CurProcess.ReadProcessMemory(StrToInt(SrcMemoryAddr), DstMemStream.Size, DstMemStream.Memory^);
to copy it into a visualizer's MemoryStream. Then you can do whatever you want to display it (for instance formatting it for human reading if it's an XML string like a CLientDataSet.XMLData).
There are few tricks depending if the Expression is a const string, a var, or needs evaluation etc...
My FGStringVisualizer is not 100% satisfying, which is why I haven't published it yet on my blog, but as it does 99% of what I need, I didn't take the time to clean it a bit and publish it even "as-is". But if there is a need I can certainly do it with all needed disclaimers...
Update: It's the same idea that I used for my FGStringListVisualizer that I presented at the last DelphiLive. By the way, this one also might be worth putting on my blog as I made a few improvements since.
来源:https://stackoverflow.com/questions/9520847/how-can-i-increase-the-size-of-the-string-that-an-external-debugger-visualizer-c