How can I show the contents of a TStringList in the debugger?

烈酒焚心 提交于 2019-12-07 00:26:57

问题


I want to display the entire content of a TStringList while debugging the application. Instead I just get pointers. The Flist is showing only the address.


回答1:


I use the visualizers now that I have D2010. I used to use a function I called CArray that would return an array of strings. If I added CArray(MyStringList) to the watch window, I would be able to examine the contents of the string list. I used to be employed to write VB6 code and I sort of liked the various 'C' functions for converting to a useful type. CArray for stringlists and CArray for ClientDataset fields were mostly useful for debugging.

  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;



回答2:


If you are using Delphi 2010 or later, the debugger allows for this using debug visualizers.

For older versions, you can dump the contents of the Text property in the Watch window or using OutputDebugString, but that's difficult to read. You could set up watches for each element of the list, but that's only practical for very short lists.

I would probably use an external logging app like CodeSite or SmartInspect that let you dump the contents of a TStringList in a single call.




回答3:


Inspect the Text property. It's the concatenated version of the stringlist.




回答4:


Since i´m using BDS MMVI, i´m using an "ultra clever smart" method for that kind issue, i use it for large xml documents. I start context file editor (very capable free text editor writen in delphi by the way). On the debugger window a just do a FList.SaveToFile('contents.txt'), since context can monitor file modifications i can see whats happening in my xml files.

Sorry for the "clever" joke but it does work for me.

Peace




回答5:


My two cents:

You can evaluate expression list_instance_variable.SaveToFile('temp_file_name.txt') and then examine content of the file in any editor.

To do that you must use this function anywhere in code and turn off optimization (at least in Delphi 7), otherwise object code of SaveToFile would be removed by the linker.



来源:https://stackoverflow.com/questions/7067619/how-can-i-show-the-contents-of-a-tstringlist-in-the-debugger

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!