2011-08-15 12 views
6

Quiero mostrar todo el contenido de una TStringList al depurar la aplicación. En vez de eso solo obtengo punteros. The Flist solo muestra la dirección.¿Cómo puedo mostrar el contenido de una TStringList en el depurador?

+1

En el modo de depuración, es posible evaluar una expresión (FList.Text) para ver todo el contenido. – mjn

+0

Pero IIRC (no se puede verificar ahora mismo) solo si habilita llamadas de funciones para tipos durante la depuración. –

+0

@Rudy: esto solo es cierto para los relojes. En la función de ventana "Evaluar y modificar" (y el procedimiento, por ejemplo, el ajustador) las llamadas siempre son posibles. – dummzeuch

Respuesta

2

Uso los visualizadores ahora que tengo D2010. Solía ​​usar una función que llamé CArray que devolvería una matriz de cadenas. Si agregué CArray (MyStringList) a la ventana del reloj, podría examinar el contenido de la lista de cadenas. Solía ​​ser empleado para escribir el código VB6 y me gustaban las diversas funciones 'C' para convertir a un tipo útil. CArray para cadenas de caracteres y CArray para campos ClientDataset fueron en su mayoría útiles para la depuración.

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; 
+0

La nueva característica de visualizadores es agradable (¡aún más agradable es que puedes escribir tus propios visualizadores personalizados!). Sin embargo, el visualizador 'TStrings' predeterminado que se envía con el IDE tiene algunas limitaciones de tamaño en el contenido de TStrings. –

7

Si está utilizando Delphi 2010 o posterior, el depurador lo permite utilizando debug visualizers.

Para versiones anteriores, puede volcar el contenido de la propiedad Texto en la ventana Inspección o usar OutputDebugString, pero eso es difícil de leer. Puede configurar relojes para cada elemento de la lista, pero eso solo es práctico para listas muy cortas.

Probablemente usaría una aplicación de registro externo como CodeSite o SmartInspect que le permite volcar el contenido de un TStringList en una sola llamada.

4

Inspeccionar la propiedad de texto. Es la versión concatenada de la lista de cadenas.

3

Dado que estoy usando BDS MMVI, estoy usando un método de "ultra inteligente inteligente" para ese tipo tema, lo uso para grandes documentos XML. Comienzo editor de archivos de contexto (editor de texto libre muy capaz escrito en Delphi por cierto). En la ventana del depurador basta con hacer un FList.SaveToFile ('contents.txt'), ya que el contexto puede monitorear las modificaciones de archivos. Puedo ver lo que sucede en mis archivos xml.

Disculpa la broma "inteligente" pero funciona para mí.

Paz

+0

+1 Responde primero :) También uso [ConTEXT] (http://www.contexteditor.org/) porque es gratis y amigable, pero el archivo se puede abrir incluso en Delphi IDE. – ThinkJet

2

Mis dos centavos:

Se puede evaluar la expresión list_instance_variable.SaveToFile('temp_file_name.txt') y luego examinar el contenido del archivo en cualquier editor.

Para hacer esto, debe utilizar esta función en cualquier parte del código y desactivar la optimización (al menos en Delphi 7), de lo contrario, el código del objeto SaveToFile será eliminado por el vinculador.

Cuestiones relacionadas