Gostaria que o Visual Studio fosse interrompido quando ocorrer uma exceção manipulada (ou seja, não quero apenas ver uma mensagem "Primeira chance", quero depurar a exceção real).
por exemplo, eu quero que o depurador quebre na exceção:
try
{
System.IO.File.Delete(someFilename);
}
catch (Exception)
{
//we really don't care at runtime if the file couldn't be deleted
}
Me deparei com essas notas para o Visual Studio.NET:
1) No VS.NET, vá para o menu Debug >> "Exceptions ..." >> "Common Language Runtime Exceptions" >> "System" e selecione "System.NullReferenceException"
2) Na parte inferior da caixa de diálogo, há uma caixa de grupo "Quando a exceção é lançada:", selecione "Invadir o depurador"
3) Execute seu cenário. Quando a exceção é lançada, o depurador irá parar e notificá-lo com uma caixa de diálogo que diz algo como: "Uma exceção do tipo" System.NullReferenceException "foi lançada. [Break] [Continue]"
Pressione [Quebrar]. Isso colocará você na linha de código que está causando o problema.
Mas eles não se aplicam ao Visual Studio 2005 (não há opção de exceções no menu Debug ).
Alguém sabe onde a caixa de diálogo encontrar essas opções no Visual Studio encontra a caixa de grupo " Quando a exceção é lançada ", com a opção " Invadir o depurador "?
Atualização: O problema era que meu menu Debug não tinha um item de Exceções . Eu personalizei o menu para adicioná-lo manualmente.
fonte
Respostas:
Com uma solução aberta, vá para a opção de menu Debug - Exceptions ( Ctrl+ D, E). A partir daí, você pode optar por quebrar as exceções lançadas ou não tratadas pelo usuário .
Edição: Minha instância é configurada com o "perfil" C # talvez não esteja lá para outros perfis?
fonte
Common Language Runtime Exceptions
><All Common Language Runtime Exceptions not in this list>
no Visual Studio 2017 e todos os meus sonhos mais loucos se tornaram realidade.Há uma janela 'exceções' no VS2005 ... tente Ctrl+ Alt+ Eao depurar e clique na caixa de seleção 'Lançada' da exceção em que você deseja interromper.
fonte
Demorei um pouco para encontrar o novo local para as configurações de expecção, portanto, uma nova resposta.
Desde o Visual Studio 2015, você controla quais exceções devem ser interrompidas na janela Configurações de exceção (Depurar-> Windows-> Configurações de exceção). O atalho ainda é Ctrl- Alt- E.
A maneira mais simples de lidar com exceções personalizadas é selecionar "todas as exceções que não estão nesta lista".
Aqui está uma captura de tela da versão em inglês:
Aqui está uma captura de tela da versão alemã:
fonte
A partir do Visual Studio 2015, você precisa ir para a caixa de diálogo "Configurações de exceção" ( Ctrl+ Alt+ E) e marcar as "Exceções de Common Language Runtime" (ou uma exceção específica que você deseja, por exemplo
ArgumentNullException
) para interromper as exceções manipuladas .Etapa 1 Etapa 2
fonte
Verifique Gerenciando exceções com a página Depurador , explica como configurar isso.
Essencialmente, aqui estão as etapas (durante a depuração):
No menu Debug, clique em Exceptions.
Na caixa de diálogo Exceções, selecione Lançada para uma categoria inteira de exceções, por exemplo, Common Language Runtime Exceptions.
-ou-
Expanda o nó para uma categoria de exceções, por exemplo, Common Language Runtime Exceptions e selecione Lançado para uma exceção específica dentro dessa categoria.
fonte
Uma técnica que eu uso é algo como o seguinte. Defina uma variável global que você pode usar para uma ou várias tentativas de blocos de captura, dependendo do que você está tentando depurar e use a seguinte estrutura:
Acho que isso me dá um pouco mais de flexibilidade em termos de teste, porque ainda existem algumas exceções que não quero que o IDE interrompa.
fonte
catch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
A documentação on-line parece um pouco obscura, então acabei de realizar um pequeno teste. Optar por interromper Lançado na caixa de diálogo Exceções faz com que a execução do programa seja interrompida em qualquer exceção, tratada ou não. Se você deseja quebrar apenas as exceções manipuladas, parece que seu único recurso é passar pelo seu código e colocar pontos de interrupção em todas as suas exceções manipuladas. Isso parece um pouco excessivo; portanto, é melhor adicionar uma instrução de depuração sempre que você manipular uma exceção. Então, quando você vir essa saída, poderá definir um ponto de interrupção nessa linha no código.
fonte