Ver cadenas completas mientras se depura en Eclipse

166

Mientras se depura el código Java, las cadenas en las vistas "Variables" y "Expresiones" se muestran solo hasta una cierta longitud, después de lo cual Eclipse muestra "..."

¿Hay alguna manera de inspeccionar toda la cadena? (Esto alivia el dolor de agregar declaraciones de registro para depurar en todas partes)

ragebiswas
fuente
¿Dónde estás viendo este comportamiento? ¿Qué parte del depurador?
skaffman
En una nota al margen, esto podría ser un nombre inapropiado, porque podría no funcionar para usted, pero si usa una biblioteca de depuración como java.util.logging o log4j, puede convertir fácilmente sus declaraciones de depuración (con diferentes niveles de depuración) en impresiones o archivos de registro y puede darle la ventaja de que no se puede examinar las cadenas en la ventana de depuración. Just a thought =)
corsiKa

Respuestas:

225

En la vista Variables, puede hacer clic con el botón derecho en el panel Detalles (la sección donde se muestra el contenido de la cadena) y seleccionar el menú emergente "Longitud máxima ...". La misma longitud se aplica a la ventana emergente del inspector de expresiones y algunos otros lugares.

ingrese la descripción de la imagen aquí

Eugene Kuleshov
fuente
17
Mucho mejor solución que la seleccionada. ¡Gracias!
Colin
13
Es bueno señalar que el Panel de detalles es la sección donde se muestra el contenido de la cadena.
Bnrdo
1
¿Cómo hacer esto en eclipse kepler? Ayuda por favor
tonto
1
La buena noticia es que este cambio también parece afectar la longitud que se muestra al pasar el mouse sobre una variable, al inspeccionar en la ventana "Inspeccionar" o en la vista "Expresiones" y mostrar valores en la vista "Mostrar".
Steve Chambers
1
He actualizado la solución correcta (la aceptada anteriormente era la única solución para versiones de Eclipse realmente antiguas).
ragebiswas
134

En la vista Variables , haga clic con el botón derecho en la variable y seleccione Cambiar valor . Si su variable es enorme, debe esperar unos minutos (en este caso, Eclipse no responde a los comandos), pero al final Eclipse mostrará su variable por completo.

Umberto
fuente
2
Solo puedo ver "data:image/bitmap;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQE... (length: 22869)". Establecer la opción "Longitud máxima" no funciona y "Cambiar valor" también.
falko
@falko "Longitud máxima" no funcionó para mí, "Cambiar valor" estaba bien (después de esperar unos segundos, dependiendo de la longitud variable).
Umberto
Al menos en mi sistema, esto es considerablemente más lento que aumentar la "Longitud máxima" (ver otra respuesta).
sleske
eclipse no está muy contento con su idea ... He intentado esto y espero desde 30 minutos, para cualquier respuesta de eclipse ... Buuut: Parece que funciona;)
Joshit
22

Si tiene una cadena realmente larga, utilizo una estrategia diferente: volcarlo en un archivo. Tengo un fragmento de código que uso en la vista Pantalla, que se evalúa para volcar los datos en un archivo. Uso Commons IO, pero puedes hacerlo solo con métodos JDK.

org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File("<filename>"), <expression to evaluate>);

Naturalmente, necesitarás el Commons IO JAR en tu classpath para que eso funcione. Si no lo hace, recurra al trabajo JDK.

zvikico
fuente
55
buena solución Yo personalmente aceptaría esta como la mejor respuesta. Advertencia: <nombre de archivo> debe definirse para el sistema donde se está ejecutando la JVM, lo que hace la diferencia si está depurando remotamente, en cuyo caso el archivo se escribirá en el sistema remoto, no en la estación de trabajo donde se está ejecutando eclipse .
rexford
18

La mejor manera de ver un valor de cadena desde la vista de depuración de eclipse es la siguiente.

1) Cambie a la vista de depuración en Eclipse

2) Seleccione la variable deseada en el panel de variables.

3) Haga clic derecho en el área de visualización del panel variable donde se muestra el valor y haga clic en Longitud máxima. Ingrese el valor máximo de caracteres en el panel Configurar detalles.

4) Saludos

ingrese la descripción de la imagen aquí

Waqas Ahmed
fuente
1
Esta explicación gráfica es realmente útil. +1
Bhavin Shah
3

Cuando el depurador llega al punto donde desea el valor de cadena, simplemente escriba una instrucción sysOut

System.out.println("The value is : \n " + query);

Seleccione lo anterior en la declaración, haga clic derecho-> Ejecutar

Imprimirá el valor en la consola

Sonali
fuente
0

Para la depuración basada en javascript en eclipse, el método de "cambio de valor" y el método de "Longitud máxima" fallaron, agregando el objeto requerido para ver ( Expresiones ) y luego haciendo clic derecho en la expresión observada para seleccionar "Cargar valor completo" es la única solución eso funciona para mí, pero incluso esto inserta "\ n" no deseado en la salida .

Nota : la "Longitud máxima" debe configurarse para que el "Cargar valor completo" funcione, ya que carga valores hasta la longitud máxima (el valor predeterminado en eclipse es 10000). Consulte la respuesta anterior para ver cómo establecer la longitud máxima.

Príncipe Champappilly
fuente
0

No hay "maxLength" en Eclipse Mars. Y, el "valor de cambio" solo funciona con "Variables", no con "Expresiones", por lo que ninguno de los anteriores funciona para mí.

ingrese la descripción de la imagen aquí

Y, las expresiones se cortan en el medio, no al final. Supongo que cambiaron el comportamiento predeterminado.

Lo único que funciona para mí es expandir el ancho de la columna del nombre de la expresión y hacer clic en la expresión para seleccionarla y ver el contenido completo.

WesternGun
fuente
0

Nada de lo anterior funcionó para mí, además, algunos elementos de la interfaz de usuario en mi Eclipse no se pueden encontrar como se describe. Estoy usando STS 4.3.1.

El valor que necesitaba era realmente grande, es parte de una gran solicitud JSON. La solución consiste en utilizar una expresión en la consola de Eclipse Debug Shell y generar la subcadena de todo el valor. Como puede ver el valor parcial, inspecciónelo y use los últimos literales como posición para generar el siguiente fragmento de la cadena. Repita este enfoque hasta obtener lo que necesita:

String result = new String(reallyBigByteArrayValue, "UTF-8");
result.substring(result.indexOf("some-unique-text"));
usuario07
fuente