Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma asserção, ou instrução Assert
, testa uma condição, que você especifica como um argumento para a instrução Assert
. Se a condição for avaliada para true, nenhuma ação ocorrerá. Se a condição for avaliada como false, haverá falha de asserção. Se você estiver executando um build de depuração, seu programa entrará no modo de interrupção.
Neste tópico
Declarações no namespace System.Diagnostics
Efeitos colaterais de Debug.Assert
Requisitos de seguimento e depuração
Personalizando o comportamento do Assert
Definindo asserções em arquivos de configuração
Afirmações 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 são incluídos na versão de lançamento do seu programa, portanto, eles não aumentam o tamanho nem reduzem a velocidade do código da versão final.
O C++ não dá suporte aos métodos de Debug 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 resultar em valores verdadeiros se seu código estiver correto. Por exemplo, suponha que você tenha escrito uma função de divisão de inteiros. 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 no 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.
Aqui está 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 o dinheiro da conta, você deseja garantir que o saldo da conta seja suficiente para cobrir o valor que você está preparando para retirar. Você pode escrever uma declaração para verificar o saldo:
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Observe que as chamadas para o método System.Diagnostics.Debug.Assert desaparecem quando você cria uma versão de lançamento do código. Isso significa que a chamada que verifica o saldo desaparece na versão de Release. Para resolver esse problema, você deve substituir System.Diagnostics.Debug.Assert por System.Diagnostics.Trace.Assert, que não desaparece na versão Release.
Chamadas para System.Diagnostics.Trace.Assert adicionam sobrecarga à sua versão Release, ao contrário das chamadas para System.Diagnostics.Debug.Assert.
Efeitos colaterais de Debug.Assert
Ao usar System.Diagnostics.Debug.Assert, certifique-se de que qualquer código interno Assert
não altere os resultados do programa se Assert
for removido. Caso contrário, você poderá introduzir acidentalmente um bug que aparece apenas na versão de lançamento do seu programa. Tenha cuidado especialmente com declarações que contêm chamadas de função ou procedimento, como o exemplo a seguir:
Esse emprego de System.Diagnostics.Debug.Assert pode parecer seguro à primeira vista, mas suponha que a função meas atualize um contador sempre que for chamada. Quando você cria a versão Release, essa chamada para meas é eliminada, então o contador não é atualizado. Este é um exemplo de uma função com um efeito colateral. Eliminar uma chamada para uma função que tenha efeitos secundários pode resultar em um bug que aparece apenas na versão de Release. Para evitar esses problemas, não coloque chamadas de função em uma System.Diagnostics.Debug.Assert declaração. Em vez disso, use uma variável temporária:
Mesmo quando você usa System.Diagnostics.Trace.Assert, talvez você ainda queira evitar a colocação de chamadas de função dentro de uma instrução Assert
. Essas chamadas serão seguras, pois System.Diagnostics.Trace.Assert as instruções não são eliminadas em um build de release. No entanto, se você evitar tais construções como uma questão de hábito, é menos provável que você cometa um erro ao usar System.Diagnostics.Debug.Assert.
Requisitos de rastreamento 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 apenas no build de Debug.
Caso contrário, para que os métodos Trace funcionem, seu programa deve ter um dos seguintes no início do arquivo de origem.
#Const TRACE = True
no Visual Basic#define TRACE
no Visual C# e C++Ou seu programa deve ser criado com a opção TRACE:
/d:TRACE=True
no Visual Basic/d:TRACE
no Visual C# e C++Se você precisar usar os métodos de depuração em uma compilação de Release do C# ou do Visual Basic, deverá definir o símbolo DEBUG na sua configuração de Release.
O C++ não dá suporte aos métodos de Debug 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 as configurações do projeto para uma configuração de depuração do Visual Basic ou alterando as configurações do projeto para uma configuração de depuração C ou C++.
Verificar 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 Assert
método verificará a condição e, se o resultado for falso, gerará 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 o terceiro argumentos, se presentes, devem ser cadeias de caracteres. Se você chamar System.Diagnostics.Trace.Assert ou System.Diagnostics.Debug.Assert com dois ou três argumentos, o primeiro argumento será uma condição. O método verifica a condição e, se o resultado for falso, gera a segunda cadeia de caracteres e a terceira cadeia 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 do Assert
Se você executar seu aplicativo no modo de interface do usuário, o Assert
método exibirá a caixa de diálogo Falha de Declaração quando a condição falhar. As ações que ocorrem quando uma asserção falha são controladas pela propriedade Listeners ou pela 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, você pode sobrescrever o método System.Diagnostics.TraceListener.Fail para gravar em um log de eventos em vez de exibir a caixa de diálogo Falha de Asserção.
Para personalizar a saída dessa forma, seu programa deve conter um ouvinte e você deve herdar de TraceListener e sobrescrever seu método System.Diagnostics.TraceListener.Fail.
Para obter mais informações, consulte Ouvintes de Rastreamento.
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.