如何在调试器中展示 TStringList 的内容?

9

我希望在调试应用程序时能够显示TStringList的全部内容,但实际上只能看到指针,Flist仅显示地址。


2
在调试模式下,可以评估表达式(FList.Text)以查看整个内容。 - mjn
但是我IRC(现在无法检查),只有在调试期间启用类型的函数调用才可以。 - Rudy Velthuis
@Rudy:这仅适用于手表。在“评估和修改”窗口函数(以及过程,例如设置器)调用始终是可能的。 - dummzeuch
1
我通常有很多观察点,很少使用“评估和修改”对话框。我喜欢我的值一直可见。 - Rudy Velthuis
5个回答

7
如果您使用的是Delphi 2010或更高版本,调试器可以使用debug visualizers来实现此功能。
对于旧版本,您可以在Watch窗口或使用OutputDebugString中转储Text属性的内容,但这很难阅读。您可以为列表的每个元素设置监视器,但这只适用于非常短的列表。
我可能会使用外部记录应用程序,例如CodeSiteSmartInspect,它们允许您在单个调用中转储TStringList的内容。

5
检查Text属性。它是字符串列表的连接版本。

3
自从我使用BDS MMVI,我用了一种“超级聪明”的方法来解决这个问题,在大型xml文档中使用它。我启动上下文文件编辑器(顺便说一句,这是一个非常能干的免费文本编辑器,由delphi编写)。在调试器窗口中,我只需要执行FList.SaveToFile('contents.txt'),因为上下文可以监视文件修改,我就可以看到我的xml文件中发生了什么。
对于那个“聪明”的笑话,我很抱歉,但是这确实适合我。
祝福

+1 你回答得真快 :) 我也使用ConTEXT,因为它是免费且友好的,但文件甚至可以在Delphi IDE中打开。 - ThinkJet

2

我现在使用可视化工具,因为我有D2010。以前我使用一个称为CArray的函数,它会返回一个字符串数组。如果我在观察窗口中添加CArray(MyStringList),我就能够检查字符串列表的内容。我曾经被雇用来编写VB6代码,我有点喜欢各种转换为有用类型的'C'函数,比如将字符串列表转换为数组和将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;

新的可视化功能很不错(更好的是你可以编写自己的自定义可视化器!)。然而,随 IDE 一起提供的默认 TStrings 可视化器对 TStrings 内容有一些大小限制。 - Remy Lebeau

2

我的建议:

您可以评估表达式list_instance_variable.SaveToFile('temp_file_name.txt'),然后在任何编辑器中检查文件的内容。

要做到这一点,您必须在代码中的任何位置使用此函数并关闭优化(至少在Delphi 7中),否则SaveToFile的目标代码将被链接器删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接