Как я могу увеличить размер строки, которую может отображать визуализатор внешнего отладчика? - PullRequest
13 голосов
/ 01 марта 2012

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

Ограничитель визуализации отладчика TStrings, поставляемый с Delphi 2010, имел ограничение в 4 КБ. В ответ на вопрос, размещенный в новостных группах Embarcadero, Эве Шустер ответил , что «Вы можете немного увеличить буфер, но AFAIR фактическое ограничение в IOTAThread. Оцените с ограничением около 12 тысяч символов».

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

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

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

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

1 Ответ

11 голосов
/ 01 марта 2012

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

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

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

Есть несколько хитростей, в зависимости от того, является ли выражение константной строкой, переменной или оценкой потребностей и т. Д. *

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

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

...