Подтвердить что ты не робот

Как увеличить размер строки, которую может отобразить визуализатор внешнего отладчика?

Я снова пишу внешний визуализатор отладчика и бегу в стену. Кажется, существует ограничение на размер строки, которую может вернуть визуализатор отладчика.

У визуализатора отладчика TStrings, поставляемого с Delphi 2010, был предел 4K. В ответ на вопрос, размещенный в новостных группах Embarcadero, Ewe Schuster ответил, что" вы можете немного увеличить буфер, но AFAIR фактическое ограничение в IOTAThread.Evaluate с лимитом порядка 12 тыс. символов.

Мой визуализатор отладчика основан на коде визуализатора отладки TStrings, и я вижу, что реализация метода TFrame Evaluate включает в себя следующее объявление ResultStr, которое используется для возврата строки, возвращенной из вызова IOTAThread.Evaluate

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

Я надеялся, что увеличение размера этого буфера поможет, но не повезло.

Что я могу сделать, если что-нибудь, увеличить размер строки, которую может отобразить визуализатор внешнего отладчика?

4b9b3361

Ответ 1

У меня было такое же ограниченное терпение для этого предела... Поэтому я сделал визуализатор отладки, который работает с ограничениями, главным образом, создав MemoryStream в отладочном процессе для хранения строкового результата выражения, затем используйте что-то вроде

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

чтобы скопировать его в визуализатор MemoryStream. Затем вы можете делать все, что хотите отобразить (например, форматировать его для чтения человеком, если это строка XML, такая как CLientDataSet.XMLData).

Есть несколько трюков, зависящих, если выражение является строкой const, var или нуждается в оценке и т.д.

Мой FGStringVisualizer не удовлетворяет на 100%, поэтому я еще не опубликовал его в своем блоге, но поскольку он составляет 99% от того, что мне нужно, я не нашел времени, чтобы немного его очистить и опубликовать это даже "как есть". Но если есть необходимость, я могу, конечно, сделать это со всеми необходимыми отказами...

Обновление: Это та же идея, что я использовал для своего FGStringListVisualizer, который я представил на последнем DelphiLive. Кстати, это тоже может стоить надеть мой блог, поскольку я сделал несколько улучшений с тех пор.