Existe "quebra na exceção" no IntelliJ?

318

Existe um recurso que interrompa automaticamente a depuração na ocorrência da primeira exceção?

Então nós

  1. iniciar aplicação
  2. faça algo que lança exceção
  3. O IntelliJ apareceu a linha destacada onde ocorreu a exceção.
Mike Chaliy
fonte
Você provavelmente deseja quebrar apenas exceções não capturadas, certo?
David Ferenczy Rogožan 17/09/19

Respostas:

367

Executar | Exibir pontos de interrupção | Pontos de interrupção de exceção

Mike Chaliy
fonte
Infelizmente, descobri que na prática (com grandes dados), as variáveis ​​de quadro com as quais você se importa nem sempre são carregadas.
information_interchange
158

Uma maneira rápida de exibir a caixa de diálogo é pressionar Ctrl+ SHIFT+ F8(No Mac: Cmd+ SHIFT+ F8) e clicar na guia Pontos de interrupção da exceção. Se essa foi a última guia que você estava visualizando, ela ainda será selecionada, facilitando a ativação e desativação de exceções.

Isso fará com que o IntelliJ quebre no ponto do código (ou código da biblioteca) em que a exceção foi gerada. Especificamente, você obtém uma 'primeira chance' no tratamento de exceções, antes que a pilha seja percorrida procurando blocos catch / finalmente para executar.


DICA: Java tende a lançar muitas exceções internamente ao carregar classes, portanto essa quebra em todas as exceções pode se tornar bastante entediante. A boa notícia é que você pode excluir certos tipos de exceção usando o campo de condição .

Por exemplo:

!(this instanceof java.lang.ClassNotFoundException)

Você pode encadear várias dessas condições juntamente com &&.

insira a descrição da imagem aqui

Drew Noakes
fonte
9
Existe uma maneira de dizer "quebrar somente exceções do meu projeto (não do sistema Java)"?
Damn Vegetables
16
Não se esqueça de "Desativado até que o ponto de interrupção selecionado seja atingido:" - este é incrível. Basta definir um ponto de interrupção no seu código após o carregamento e a configuração de todas as Java ou outras bibliotecas. Em seguida, escolha seu ponto de interrupção no menu suspenso e aguarde. Seu ponto de interrupção será hit, e, em seguida, uma vez que você bateu continuar, o novo filtro Caught de exceção & Uncaught vai chutar :).
Louis St-Amour
1
Não se esqueça de marcar "Exceção capturada" e "Exceção não capturada" na parte inferior da caixa de diálogo Pontos de interrupção.
Robino
59

No IntelliJ IDEA 14, acesse:

Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"

Se você não desmarcar, Caught Exceptionsa execução será interrompida toda vez que Java Frameworklançar uma exceção interna.

Tonatio
fonte
1
Run -> Ver Breakpoints ... -> marque "Java Exceções pontos de interrupção" -> desmarque "Exceções apanhado"
Jonas
2
Infelizmente, isso ainda quebra as exceções capturadas para mim, mesmo depois de desativar as "exceções capturadas".
Carcigenicate
Esta é uma informação muito importante, eu diria, caso contrário, é uma exceção, sem valor de informação. Principalmente ao usar grandes estruturas como o Grails.
David Ferenczy Rogožan 17/09/19
OK, mudei de idéia - ambas as opções, com e sem exceções capturadas, são ruins, porque geralmente, em um aplicativo Web típico, todas as exceções costumam ser detectadas, há um bloco de captura de nível superior que captura tudo e formata para ser apresentado ao usuário. Portanto, sem as exceções capturadas, ele não quebra nada, com elas, quebra centenas de vezes durante uma única solicitação. Ambos inúteis :(
David Ferenczy Rogožan
Nada é inútil, se você souber usá-lo.
Alessandro Flati 6/12/19
12

Sim existe. Você precisa definir um ponto de interrupção de exceção (pode ser "Qualquer exceção") na caixa de diálogo de pontos de interrupção no IntelliJ IDEA.

As exceções podem ser filtradas por condição ou classe, se desejado, ou se você está interessado em exceções capturadas ou não capturadas.

Avi
fonte
7

Se você clicar no pequeno sinal de "+" no canto superior esquerdo, poderá adicionar um novo ponto de interrupção. Se você selecionar Ponto de interrupção de exceção, será exibida uma pequena caixa de diálogo na qual poderá inserir a classe de exceção para interromper (caso você não queira interromper todas as exceções).

koljaTM
fonte
0

Nas versões mais recentes do intellij, em Executar > Exibir pontos de interrupção .

Em seguida, verifique Java Exception Breakpoints -> Any Exception .

Uma boa maneira de depurar as exceções é usar o pacote principal de aplicativos e o curinga .*. Dessa forma, você pula todas as outras exceções de bibliotecas, pois na maioria das vezes você procura exceções lançadas pelo aplicativo e não por qualquer outra biblioteca (que pode ser muitas exceções).

Como um exemplo mostrado na imagem, eu uso com.gs.mercury.*para quebrar sempre que o aplicativo lança uma exceção. Se você usar exceções para o que elas servem (para lidar com casos excepcionais e não para lidar com o fluxo de situações normais), você só parará quando atingir a exceção desejada quase o tempo todo.

PD. resposta adicionada apenas para indicar o útil filtro da classe Catch .

Pontos de interrupção

Jose Da Silva
fonte