Как я могу показать содержимое TStringList в отладчике? - PullRequest
7 голосов
/ 15 августа 2011

Я хочу отобразить все содержимое TStringList при отладке приложения. Вместо этого я просто получаю указатели. Флист показывает только адрес.

Ответы [ 5 ]

7 голосов
/ 15 августа 2011

Если вы используете Delphi 2010 или более позднюю версию, отладчик допускает это, используя отладочные визуализаторы .

Для более старых версий вы можете сбросить содержимое свойства Text в окне Watch или с помощью OutputDebugString, но это трудно прочитать. Вы можете настроить часы для каждого элемента списка, но это практично только для очень коротких списков.

Я бы, вероятно, использовал бы внешнее приложение для ведения журналов, например CodeSite или SmartInspect , которое позволит вам вывести содержимое TStringList за один вызов.

4 голосов
/ 15 августа 2011

Проверьте свойство Text.Это составная версия списка строк.

3 голосов
/ 16 августа 2011

Так как я использую BDS MMVI, я использую «очень умный умный» метод для такого рода проблем, я использую его для больших XML-документов.Я запускаю редактор контекстных файлов (кстати, очень удобный бесплатный текстовый редактор, написанный на delphi).В окне отладчика просто сделайте FList.SaveToFile ('contents.txt'), так как контекст может отслеживать изменения файлов, я могу видеть, что происходит в моих файлах XML.у меня работает.

Мир

2 голосов
/ 16 августа 2011

Мои два цента:

Вы можете оценить выражение list_instance_variable.SaveToFile('temp_file_name.txt'), а затем просмотреть содержимое файла в любом редакторе.

Чтобы сделать это, вы должны использовать эту функцию в любом месте кода и отключить оптимизацию (по крайней мере, в Delphi 7), в противном случае объектный код SaveToFile будет удален компоновщиком.

2 голосов
/ 16 августа 2011

Теперь я использую визуализаторы, когда у меня D2010. Я использовал функцию, которую я назвал CArray, которая возвращает массив строк. Если бы я добавил CArray (MyStringList) в окно наблюдения, я смог бы проверить содержимое списка строк. Раньше я работал для написания кода на VB6, и мне нравились различные функции «C» для преобразования в полезный тип. CArray для списков строк и CArray для полей ClientDataset были в основном полезны для отладки.

  function  CArray(List: TStrings): TStrArray; Overload;
  var i,
      iCount: Integer;
  begin
    iCount := List.Count;
    SetLength(Result, iCount);
    for i := 0 to Pred(iCount) do Result[i] := List[i];
  end;
...