Asserção em código gerenciado
Uma declaração, ou a declaração de Assert , testar uma condição, que você especifique como um argumento para a declaração de Assert .Se a condição for avaliada como verdadeiro, nenhuma ação ocorre.Se a condição for avaliada como false, a declaração falha.Se você estiver executando com uma construção de depuração, seu programa entra em modo de interrupção.
Neste tópico
Afirma no namespace de System.Diagnostics
O método de Debug.Assert
Efeitos colaterais de Debug.Assert
Requisitos de rastreamento e depuração
Declarar argumentos
Personalizar o comportamento afirma
Declarações de configuração em arquivos de configuração
Afirma no namespace de System.Diagnostics
No Visual Basic e Visual c#, você pode usar o método de Assert de Debug ou de Trace, que estão no espaço de System.Diagnostics .os métodos da classeDebug não são incluídos em uma versão de lançamento do seu programa, o que não aumentando o tamanho ou não reduzem a velocidade de seu código de versão.
C++ não suporta os métodos da classe Debug .Você pode obter o mesmo efeito usando a classe de Trace com compilação condicional, como #ifdef DEBUG…#endif.
Neste tópico
O método de Debug.Assert
Use o método de Debug.Assert distribuído para testar condições que devem conter verdadeiro se seu código está correto.Por exemplo, suponha que você tenha escrito uma função de partilha inteiro.As regras de matemática, o divisor nunca pode ser zero.Você pode testar isso usando uma declaração:
Function IntegerDivide(ByVal dividend As Integer, ByVal divisor As Integer) As Integer
Debug.Assert(divisor <> 0)
Return CInt(dividend / divisor)
End Function
int IntegerDivide ( int dividend , int divisor )
{ Debug.Assert ( divisor != 0 );
return ( dividend / divisor ); }
Quando você executa esse código do depurador, a instrução de declaração é avaliada, mas a versão de lançamento, a comparação não é feita, então se há nenhuma sobrecarga adicional.
Aqui está um exemplo.Você tem uma classe que implementa uma conta corrente, como segue:
Dim amount, balance As Double
balance = savingsAccount.balance
Debug.Assert(amount <= balance)
SavingsAccount.Withdraw(amount)
float balance = savingsAccount.Balance;
Debug.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Antes de principais dinheiro de conta, você deseja para certificar-se de que o saldo de contas é suficiente para cobrir a quantidade que você está preparando para retirar se.Você pode escrever uma declaração para verificar o saldo:
Dim amount, balance As Double
balance = savingsAccount.balance
Trace.Assert(amount <= balance)
SavingsAccount.Withdraw(amount)
float balance = savingsAccount.Balance;
Trace.Assert ( amount <= balance );
savingsAccount.Withdraw ( amount );
Observe que chamadas para o método de Debug.Assert desaparecem quando você criar uma versão de lançamento 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 Debug.Assert com Trace.Assert, que não desaparece na versão de lançamento:
Chamadas a Trace.Assert adicionam sobrecarga a sua versão de lançamento, diferentemente de chamadas para Debug.Assert.
Neste tópico
Efeitos colaterais de Debug.Assert
Quando você usa Debug.Assert, certifique-se de que nenhum código Assert interno não altera os resultados do programa se Assert é removido.Caso contrário, você pode acidentalmente criar um bug que aparece somente na versão de lançamento do seu programa.É especialmente cuidadadoso para afirma " que contém a chamadas de função ou procedimento, como o exemplo a seguir:
' unsafe code
Debug.Assert (meas(i) <> 0 )
// unsafe code
Debug.Assert (meas(i) != 0 );
Esse uso de Debug.Assert pode parecer seguro à primeira vista, mas suponha as atualizações de meas de função um contador cada vez que é chamado.Quando você compila a versão de lançamento, esta chamada para meas é eliminado, o contador não é atualizado.Este é um exemplo de uma função com um efeito colateral.Eliminar uma chamada a uma função que tem efeitos colaterais pode levar a um bug que aparece somente na versão de lançamento.Para evitar esses problemas, não coloque chamadas de função em uma instrução de Debug.Assert .Use uma variável temporário em vez disso:
temp = meas( i )
Debug.Assert (temp <> 0)
temp = meas( i );
Debug.Assert ( temp != 0 );
Mesmo quando você usa Trace.Assert, você ainda pode desejar evitar colocar chamadas de função em uma instrução de Assert .Essas chamadas devem ser seguros, porque as instruções de Trace.Assert não são eliminadas em uma construção de versão.Entretanto, se você evita compilações como uma questão de hábito, você é menos provável fazer um erro quando você usa Debug.Assert.
Neste tópico
Requisitos de rastreamento e depuração
Se você criar seu projeto usando os assistentes de Visual Studio , o símbolo trace é definido por padrão nas configurações de lançamento e de depuração.O símbolo debug é definido por padrão somente na compilação de depuração.
Se não, para que os métodos de Trace funcionem, o programa deve ter um destes na parte superior do arquivo de origem:
#Const TRACE = True no Visual Basic
#define TRACE no Visual c# e C++
Ou seu programa deve ser compilado com a opção trace:
/d:TRACE=True no Visual Basic
/d:TRACE Visual c# e C++
Se você precisar usar os métodos de depuração em uma construção de versão C# ou Visual Basic, você deve definir o símbolo debug em sua configuração de versão.
C++ não suporta os métodos da classe Debug .Você pode obter o mesmo efeito usando a classe de Trace com compilação condicional, como #ifdef DEBUG…#endif.Você pode definir esses símbolos na caixa de diálogo <Project> Páginas de Propriedade .Para obter mais informações, consulte Alterando configurações do projeto para Visual Basic depurar a configuração ou Alterando configurações do projeto para a energia AC ou C++ depurar a configuração.
Declarar argumentos
Trace.Assert e Debug.Assert têm até três argumentos.O primeiro argumento, que é obrigatório, é a condição que você deseja verificar.Se você chamar Trace.Assert(Boolean) ou Debug.Assert(Boolean) com apenas um argumento, o método de Assert verifica a condição e, se o resultado é false, a saída o conteúdo da pilha de chamadas para a janela de Saída .O exemplo a seguir mostra Trace.Assert(Boolean) e Debug.Assert(Boolean):
Debug.Assert(stacksize > 0)
Trace.Assert(stacksize > 0)
Debug.Assert ( stacksize > 0 );
Trace.Assert ( stacksize > 0 );
O segundo e terceiro argumentos, se presentes, devem ser cadeias de caracteres.Se você chamar Trace.Assert ou 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 falso, são saída a segunda cadeia de caracteres e o terceiro cadeias de caracteres.O seguinte mostra Debug.Assert(Boolean, String) e Trace.Assert(Boolean, String) de exemplo usados com dois argumentos:
Debug.Assert(stacksize > 0, "Out of stack space")
Trace.Assert(stacksize > 0, "Out of stack space")
Debug.Assert ( stacksize > 0, "Out of stack space" );
Trace.Assert ( stacksize > 0, "Out of stack space" );
O exemplo a seguir mostra Assert e Assert:
Debug.Assert(stacksize > 0, "Out of stack space. Bytes left:" , Format(size, "G"))
Trace.Assert(stacksize > 0, "Out of stack space. Bytes left:" , Format(size, "G"))
Trace.Assert(stacksize > 0, "Out of stack space. Bytes left:", "inctemp failed on third call" )
Debug.Assert ( stacksize > 100, "Out of stack space" , "Failed in inctemp" );
Trace.Assert ( stacksize > 0, "Out of stack space", "Failed in inctemp" );
Neste tópico
Personalizar o comportamento afirma
Se você executar o aplicativo no modo da interface do usuário, o método de Assert exibe a caixa de diálogo Falha na asserção quando a condição falhar.Ações que ocorrem quando uma declaração falha são controladas pela propriedade de Listeners ou de Listeners .
Você pode personalizar o comportamento de saída adicionando um objeto de TraceListener à coleção de Listeners , remover TraceListener de coleção de Listeners , ou substituindo o método de TraceListener.Fail de TraceListener existente para torná-lo se comportar de maneira diferente.
Por exemplo, você pode substituir o método de TraceListener.Fail para gravar no log de eventos em vez de exibir a caixa de diálogo Falha na asserção .
Para personalizar a saída dessa maneira, o programa deve conter um ouvinte, e você deve herdar de TraceListener e substitua o método de TraceListener.Fail .
Para obter mais informações, consulte Ouvintes de rastreamento.
Neste tópico
Declarações de configuração em arquivos de configuração
Você pode definir asserções no arquivo de configuração do programa assim como em seu código.Para obter mais informações, consulte Trace.Assert ou Debug.Assert.
Consulte também
Tarefas
Como: compilar condicionalmente com rastreamento e depuração
Referência
Conceitos
Outros recursos
Rastreamento e instrumentação a aplicativos
Preparação para depuração: C#, F# e tipos de projeto de Visual Basic