Visualizando cadeias completas durante a depuração no Eclipse

166

Durante a depuração do código Java, as seqüências de caracteres nas visualizações "Variáveis" e "Expressões" são exibidas apenas até um determinado período, após o que o Eclipse mostra "..."

Existe alguma maneira de inspecionar toda a cadeia? (Isso facilita a adição de instruções de log para depuração em qualquer lugar)

ragebiswas
fonte
onde você está vendo esse comportamento? qual parte do depurador?
Skaffman #
Em uma nota lateral, isso pode ser um nome impróprio, porque pode não funcionar para você, mas se você usar uma biblioteca de depuração como java.util.logging ou log4j, poderá transformar facilmente suas instruções de depuração (com diferentes níveis de depuração) em impressões ou arquivos de log e isso pode dar a você a vantagem de que peneirar as seqüências de caracteres na janela de depuração. Apenas um pensamento =)
corsiKa

Respostas:

225

Na visualização Variáveis, você pode clicar com o botão direito do mouse no painel Detalhes (a seção em que o conteúdo da string é exibido) e selecionar o menu pop-up "Max Length ...". O mesmo comprimento se aplica ao pop-up do inspetor de expressão e a alguns outros lugares.

insira a descrição da imagem aqui

Eugene Kuleshov
fonte
17
Solução muito melhor que a selecionada. Obrigado!
Colin
13
É bom ressaltar que o Painel de Detalhes é a seção em que o conteúdo da string é exibido.
Bnrdo 21/03
1
Como fazer isso no eclipse kepler? Pls ajuda
Tolo
1
A boa notícia é que essa alteração também parece afetar o comprimento exibido ao passar o mouse sobre uma variável, inspecionando na janela "Inspecionar" ou na exibição "Expressões" e exibindo valores na exibição "Exibição".
21416 Steve Chambers
1
Atualizei a solução correta (a que foi aceita anteriormente era a única solução para versões realmente antigas do Eclipse).
usar o seguinte código
134

Na visualização Variáveis , clique com o botão direito do mouse na variável e selecione Alterar valor . Se sua variável for enorme, você deverá esperar alguns minutos (neste caso, o Eclipse não responde aos comandos), mas no final o Eclipse mostrará sua variável completamente.

Umberto
fonte
2
Eu posso ver apenas "data:image/bitmap;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQE... (length: 22869)". Defina a opção "Comprimento máximo" para não funcionar e "Alterar valor" também.
Falko
@falko "Max Length" não funcionou para mim, "Change value" estava ok (depois de esperar alguns segundos, dependendo do tamanho da variável).
Umberto
Pelo menos no meu sistema, isso é consideravelmente mais lento do que aumentar o "Comprimento máximo" (veja outra resposta).
sleske
eclipse não é completamente feliz com sua idéia .. Ive tentou isso e espero desde 30 minutos agora, para qualquer resposta do eclipse .. Buuut: Parece-obra;)
Joshit
22

Se você tem uma string muito longa, eu uso uma estratégia diferente: despeje-a em um arquivo. Eu tenho um trecho de código que uso na exibição Exibir, que é avaliada para despejar os dados em um arquivo. Eu uso o Commons IO, mas você pode fazê-lo apenas com métodos JDK.

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

Naturalmente, você precisará do Commons IO JAR em seu caminho de classe para que isso funcione. Caso contrário, recorra ao trabalho do JDK.

zvikico
fonte
5
solução legal. Eu, pessoalmente, aceitaria essa como a melhor resposta. Advertência: <filename> deve ser definido para o sistema em que a JVM está sendo executada, o que faz a diferença se você estiver depurando remotamente; nesse caso, o arquivo será gravado no sistema remoto, não na estação de trabalho em que o eclipse está sendo executado .
Rexford
18

A melhor maneira de visualizar um valor String na visualização de depuração do eclipse é como abaixo.

1) Alterne para a visualização de depuração no Eclipse

2) Selecione a variável desejada no painel de variáveis.

3) Clique com o botão direito do mouse na área de exibição do painel variável onde o valor é mostrado e clique em Comprimento Máx. Digite o valor máximo de caractere no painel Configurar detalhes.

4) Saúde

insira a descrição da imagem aqui

Waqas Ahmed
fonte
1
Esta explicação gráfica é realmente útil. +1
Bhavin Shah
3

Quando o depurador atingir o ponto em que você deseja o valor String, basta digitar uma instrução sysOut

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

Selecione a instrução acima, clique com o botão direito do mouse-> Executar

Ele imprimirá o valor no console

Sonali
fonte
0

Para depuração baseada em javascript no eclipse, os métodos "alterar valor" e "Comprimento máximo" falharam para mim, adicionando o objeto necessário a ser observado ( Expressões ) e clicando com o botão direito do mouse na expressão observada para selecionar "Carregar valor total" é a única solução isso funciona para mim, mas mesmo isso insere "\ n" indesejados na saída .

Nota - "Comprimento máximo" deve ser configurado para que "Carregar valor total" funcione, pois carrega valores até o comprimento máximo (o padrão no eclipse é 10000). Consulte a resposta acima para ver como definir o comprimento máximo.

Prince Champappilly
fonte
0

Não há "maxLength" no Eclipse Mars. E, o "valor da alteração" funciona apenas com "Variáveis", não "Expressões", portanto, nenhuma das opções acima funciona para mim.

insira a descrição da imagem aqui

E, a expressão é cortada no meio, não no final. Eu acho que eles mudaram o comportamento padrão.

A única coisa que funciona para mim é expandir a largura da coluna do nome da expressão e clicar na expressão para selecionar tudo e ver o conteúdo completo.

WesternGun
fonte
0

Nada do acima funcionou para mim; além disso, alguns elementos da interface do usuário no meu Eclipse não podem ser encontrados conforme descrito. Estou usando o STS 4.3.1.

O valor que eu precisava era muito grande, faz parte de uma enorme solicitação JSON. A solução alternativa é usar uma expressão no console do Eclipse Debug Shell e gerar a substring de todo o valor. Como você pode ver o valor parcial, inspecione-o e use os últimos literais como a posição para gerar o próximo pedaço da string. Repita essa abordagem até obter o que você precisa:

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