Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Uma asserção, ou instrução Assert, testa uma condição, que especifica como um argumento para a instrução Assert. Se a condição for avaliada como verdadeira, não ocorre qualquer ação. Se a condição for avaliada como falsa, a asserção falha. Se estiveres a executar com uma compilação de depuração, o teu programa entra no modo de interrupção.
Neste tópico
Asserts do namespace System.Diagnostics
Efeitos colaterais de Debug.Assert
Requisitos de rastreamento e depuração
Personalizando o comportamento Assert
Definindo asserções em arquivos de configuração
Assertivas no namespace System.Diagnostics
No Visual Basic e no Visual C#, você pode usar o método Assert de Debug ou Trace, que estão no espaço de nomes System.Diagnostics.
Debug Os métodos de classe não estão incluídos em uma versão Release do seu programa, portanto, eles não aumentam o tamanho ou reduzem a velocidade do seu código de versão.
C++ não suporta os Debug métodos de classe. Você pode obter o mesmo efeito usando a Trace classe com compilação condicional, como #ifdef DEBUG... #endif.
O método Debug.Assert
Use o método System.Diagnostics.Debug.Assert livremente para testar condições que devem ser verdadeiras se o código estiver correto. Por exemplo, suponha que você tenha escrito uma função de divisão inteira. Pelas regras da matemática, o divisor nunca pode ser zero. Você pode testar isso usando uma asserção:
int IntegerDivide ( int dividend , int divisor )
{
Debug.Assert ( divisor != 0 );
return ( dividend / divisor );
}
Quando você executa esse código sob o depurador, a instrução de asserção é avaliada, mas na versão Release, a comparação não é feita, portanto, não há sobrecarga adicional.
Eis outro exemplo. Você tem uma classe que implementa uma conta corrente, da seguinte maneira:
float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Antes de retirar dinheiro da conta, você quer ter certeza de que o saldo da conta é suficiente para cobrir o valor que você está se preparando para sacar. Você pode escrever uma asserção para verificar o saldo:
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Observe que as chamadas para o System.Diagnostics.Debug.Assert método desaparecem quando você cria uma versão Release do seu código. Isso significa que a chamada que verifica o saldo desaparece na versão de lançamento. Para resolver esse problema, você deve substituir System.Diagnostics.Debug.Assert por System.Diagnostics.Trace.Assert, que não desaparece na versão de lançamento:
Chamadas para System.Diagnostics.Trace.Assert adicionam uma sobrecarga à sua versão Release, ao contrário das chamadas para System.Diagnostics.Debug.Assert.
Efeitos colaterais de Debug.Assert
Ao utilizar System.Diagnostics.Debug.Assert, certifique-se de que o código dentro de Assert não modifique os resultados do programa se Assert for removido. Caso contrário, você pode acidentalmente introduzir um bug que só aparece na versão Release do seu programa. Tenha especial cuidado com asserções que contenham chamadas de função ou procedimento, como o exemplo a seguir:
Este uso de System.Diagnostics.Debug.Assert pode parecer seguro à primeira vista, mas suponha que a função meas atualiza um contador cada vez que é chamado. Quando você cria a versão de lançamento, essa chamada para meas é eliminada, para que o contador não seja atualizado. Este é um exemplo de uma função com um efeito colateral. Eliminar uma chamada para uma função que tem efeitos colaterais pode resultar em um bug que só aparece na versão de lançamento. Para evitar esses problemas, não coloque chamadas de função numa System.Diagnostics.Debug.Assert declaração. Em vez disso, use uma variável temporária:
Mesmo quando usas System.Diagnostics.Trace.Assert, ainda podes querer evitar colocar chamadas de função dentro de uma instrução Assert. Essas chamadas devem ser seguras, porque System.Diagnostics.Trace.Assert as instruções não são eliminadas em uma compilação de versão. No entanto, se você evitar tais construções por uma questão de hábito, é menos provável que cometa um erro quando você usa System.Diagnostics.Debug.Assert.
Requisitos de seguimento e depuração
Se você criar seu projeto usando os assistentes do Visual Studio, o símbolo TRACE será definido por padrão nas configurações Release e Debug. O símbolo DEBUG é definido por padrão somente na compilação Debug.
Caso contrário, para que os Trace métodos funcionem corretamente, o programa deve ter uma das seguintes opções no topo do arquivo de origem:
#Const TRACE = Trueem Visual Basic#define TRACEem Visual C# e C++Ou seu programa deve ser construído com a opção TRACE:
/d:TRACE=Trueem Visual Basic/d:TRACEem Visual C# e C++Se você precisar usar os métodos Debug em uma compilação C# ou Visual Basic Release, você deve definir o símbolo DEBUG em sua configuração de versão.
C++ não suporta os Debug métodos de classe. Você pode obter o mesmo efeito usando a Trace classe com compilação condicional, como
#ifdef DEBUG...#endif. Você pode definir esses símbolos na caixa de diálogo Páginas de Propriedades do <Projeto>. Para obter mais informações, consulte Alterando configurações de projeto para uma configuração de depuração do Visual Basic ou Alterando configurações de projeto para uma configuração de depuração C ou C++.
Afirmar argumentos
System.Diagnostics.Trace.Assert e System.Diagnostics.Debug.Assert aceitam até três argumentos. O primeiro argumento, que é obrigatório, é a condição que você deseja verificar. Se você chamar System.Diagnostics.Trace.Assert(Boolean) ou System.Diagnostics.Debug.Assert(Boolean) com apenas um argumento, o método verificará Assert a condição e, se o resultado for falso, enviará o conteúdo da pilha de chamadas para a janela Saída . O exemplo a seguir mostra System.Diagnostics.Trace.Assert(Boolean) e System.Diagnostics.Debug.Assert(Boolean):
O segundo e terceiro argumentos, se presentes, devem ser strings. Se chamar System.Diagnostics.Trace.Assert ou System.Diagnostics.Debug.Assert com dois ou três argumentos, o primeiro argumento é uma condição. O método verifica a condição e, se o resultado for falso, gera a segunda e a terceira cadeias de caracteres. O exemplo a seguir mostra System.Diagnostics.Debug.Assert(Boolean, String) e System.Diagnostics.Trace.Assert(Boolean, String) é usado com dois argumentos:
Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );
O exemplo a seguir mostra System.Diagnostics.Debug.Assert(Boolean, String, String) e System.Diagnostics.Trace.Assert(Boolean, String, String) é usado com três argumentos:
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );
Personalizando o comportamento Assert
Se você executar seu aplicativo no modo de interface do usuário, o Assert método exibirá a caixa de diálogo Assertion Failed quando a condição falhar. As ações que ocorrem quando uma asserção falha são controladas pela propriedade Listeners ou Listeners.
Você pode personalizar o comportamento de saída adicionando um TraceListener objeto à Listeners coleção, removendo um TraceListener da Listeners coleção ou substituindo o System.Diagnostics.TraceListener.Fail método de um existente TraceListener para que ele se comporte de forma diferente.
Por exemplo, pode sobrescrever o método System.Diagnostics.TraceListener.Fail para, em vez de exibir a caixa de diálogo Assertion Failed, gravar em um log de eventos.
Para personalizar a saída dessa maneira, seu programa deve conter um escuta, e você deve herdar de TraceListener e sobrescrever o seu System.Diagnostics.TraceListener.Fail método.
Para obter mais informações, consulte Rastrear ouvintes.
Definindo asserções em arquivos de configuração
Você pode definir asserções no arquivo de configuração do programa, bem como no código. Para obter mais informações, consulte System.Diagnostics.Trace.Assert ou System.Diagnostics.Debug.Assert.