Pergunta

Eu estou usando C # com a biblioteca XNA e eu estou ficando NaNs surgindo na minha Vector3 objetos. Existe uma maneira de invadir o depurador quando o cálculo ofender acontece (por exemplo, uma divisão por zero)? Atualmente o programa só continua a funcionar. Eu estou usando VS2008 Professional. Todas as exceções nas Exceções de diálogo são selecionados na coluna "user-não tratada".

Edit: Para esclarecer, eu não posso trabalhar para fora onde o mau cálculo é. É por isso que eu quero que o depurador para quebrar automaticamente. Definir pontos de interrupção não é uma solução.

Foi útil?

Solução

Em primeiro lugar dividindo um / float dupla por zero dá Infinito / -Infinity dependendo se o casal é positivo ou negativo. Apenas um duplo zero / float dividido por zero dá NaN. Em qualquer caso, nenhuma exceção será lançada.

Você deve ser capaz de usar pontos de interrupção condicionais para detectar quando uma determinada variável é configurado para um destes valores. Tenha cuidado ao verificar NaN embora, como NaN! = NaN.

double a = double.NaN;
Console.Out.WriteLine(a == double.NaN); // false
Console.Out.WriteLine(a == a); // false
Console.Out.WriteLine(double.IsNaN(a)); // true

Outras dicas

Parece que você está lidando com a exceção de alguma forma (como um captura uma exceção genérica) O que você pode fazer é pressionar Ctrl + Alt + E para abrir o diálogo exceções - certifique-se de verificar a caixa de seleção "quando jogado" para a exceção (s) que você está interessado

Você pode definir um condicional breakpoint que apenas pausas quando o divisor de uma expressão? 0 .

Eu sei que este é um post antigo, mas .....

a partir da experiência a sua quase sempre Vector3.Normalize que eu uso por engano.

Quando eu não tenho certeza se será comprimento zero agora eu sempre faço

L = flutuador V.Length (); if (L! = 0,0) V / L =;

divisão por zero em Normalize deve dar uma exceção, mas isso não acontece. Me fez um monte de coçar a cabeça.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top