Exceptions
Please let me introduce myself
● Desenvolvedor Pleno na Bem Promotora de Vendas
● Futuro Engenheiro da Computação
● Músico hobbysta
● Reviewer olhos de Lince
O que é exception?
Segundo o Dicionário priberam exceção é o “Desvio da regra geral”
Segundo o Site significados.com.br: “Exceção significa algo que não é comum, que não faz
parte das regras. A exceção ocorre quando acontece algo fora da regra comum, um fato
inédito, que não era feito ou conhecido antes, e foi aberta uma exceção.”
Segundo a Microsoft: “An exception is any error condition or unexpected behavior that is
encountered by an executing program” (Uma exceção é qualquer condição de erro ou
comportamento inesperado encontrado por um programa em execução)
O que é exception?
Segundo o sistema operacional: Uma exception
nada mais é do que uma interrupção de sistema,
mais especificamente uma interrupção de
software
Interrupção de Sistema
O que é interrupção de sistema?
Interrupção de sistema é um sinal emitido ao processador informando que um evento requer
atenção imediata, algo semelhante ao seu chefe dizer para parar a sua tarefa atual para
atender esta nova tarefa urgente (sendo que a anterior também era urgente :) ).
Interrupções de sistema podem ser tanto de hardware quanto software. As interrupções de
hardware são feitas através de sinais eletrônicos (semelhante a uma chave) e rodam de
maneira assíncrona.
Interrupções de Software
Interrupções de software podem ser: uma operação ilegal executada pelo processador ou
instruções (“pedaços” de códigos) especiais que ao serem executados geram uma interrupção.
As system calls, códigos para solicitar ao SO o uso de algum hardware, são um tipo de
interrupção.
Exceptions são outro caso de interrupção de sistema.
Como funciona uma
interrupção de sistema?
1. Software executa uma instrução
especial de interrupção de sistema
2. O processador recebe esta instrução
3. O processador para a thread atual
4. O processador salva o contexto da
thread atual
5. O processador busca o handler de
tratamento da interrupção
6. O handler é executado (exception
handler)
7. A thread anterior é restaurada
Existem dois tipos básicos de exception: As tratadas pelo CLR e as não tratadas por ele
As tratadas pelo CLR, localizam-se na stack
E as não tratadas pelo CLR, localizam-se no heap e são chamadas de exceptions de código
não gerenciado.
Ambas podem ser capturadas e tratadas pelos blocos try/catch, salvo algumas “exceções” que
não podem ser tratadas e terminam o programa.(Ex: stackoverflow)
E como funciona no caso da Exception?
Exception tratadas pelo CRL (Unwinding)
1. Uma operação inválida é gerada
2. O runtime percorre a pilha(stack) buscando o handler de exception correto. Primeiro
lexicamente e em seguida descendo pela call stack (bottom up).
a. Em casos de exception de sistema(fora do .net framework) é buscada o handler de exception
definido por um filter de tratamento SEH
3. Quando o handler correto é encontrado, a stack vai sendo “desenrolado” (unwond) até
aquele ponto
4. No caminho até o ponto de exception
a. todos os objetos locais são destruídos
b. todos os blocos finally são executados
5. Chegando ao originador da exception, ela é acionada
6. O bloco finally é executado
7. A exception é tratada pelo manipulador de exception no código, ou bloqueia a thread
atual. Em casos de stackoverflow a aplicação termina sua execução
Exception de código Não Gerenciado
● Se uma exception de tipo nativo do c# ocorre, esta é desempacotada e comparada com
o tipo encontrado. Desta forma o c# pode tratá-lo como se fosse um código
gerenciado(via normal)
● Agora, se houver algum catch do tipo SEHException ou um de seus tipos base antes de
um tipo de exception nativo do c#, o exception do SEH intercepta a exception antes.
Este tipo de exception pode ser tratada de duas formas:
Boas práticas ao lidar
com exceptions
Conheça a anatomia da exception
Data Obtém uma coleção chave/valor que proporciona informação adicional defina
pelo usuário sobre àquela exception
Helplink Contém o link para o arquivo associado àquela exception
HResult Código numérico atribuído à exception
InnerException Obtém a Exception que originou a exception atual
Message Descreve a exception atual
Source Contém nome da aplicação ou objeto que causou o erro
StackTrace Obtém a string que representa os frames da call stack
TargetSite Obtém o método que lançou a exception atual
Boas práticas ao lidar com exceptions
● Evite exceptions para erros capturáveis antes de “estourar exceptions”
● Try catch cala boca não.
● Ocorreu exception! Podemos tratar e seguir a execução? Se sim, trate, logue e segue o
baile
● Utilize exceptions quando
○ for utilizar I/O
○ lib de terceiros
○ nas suas libs públicas
● Leia este artigo da Microsoft
Referências
https://www.significados.com.br/excecao/
https://dicionario.priberam.org/exce%C3%A7%C3%A3o
https://docs.microsoft.com/en-us/cpp/dotnet/basic-concepts-in-using-managed-exceptions?view=vs-2019
https://docs.microsoft.com/en-
us/dotnet/api/system.runtime.interopservices.sehexception?redirectedfrom=MSDN&view=netcore-2.2
https://docs.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions
https://docs.microsoft.com/en-us/dotnet/api/system.exception?view=netcore-2.2
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/exceptions/
https://en.wikipedia.org/wiki/Exception_handling
https://docs.microsoft.com/en-us/dotnet/standard/exceptions/
Obrigado
class Juliano_Poveda
{
string medium = “@julianopoveda”
string github = “/julianopoveda”
string email = “julianopoveda@gmail.com”
}

Exceptions

  • 1.
  • 2.
    Please let meintroduce myself ● Desenvolvedor Pleno na Bem Promotora de Vendas ● Futuro Engenheiro da Computação ● Músico hobbysta ● Reviewer olhos de Lince
  • 3.
    O que éexception? Segundo o Dicionário priberam exceção é o “Desvio da regra geral” Segundo o Site significados.com.br: “Exceção significa algo que não é comum, que não faz parte das regras. A exceção ocorre quando acontece algo fora da regra comum, um fato inédito, que não era feito ou conhecido antes, e foi aberta uma exceção.” Segundo a Microsoft: “An exception is any error condition or unexpected behavior that is encountered by an executing program” (Uma exceção é qualquer condição de erro ou comportamento inesperado encontrado por um programa em execução)
  • 4.
    O que éexception? Segundo o sistema operacional: Uma exception nada mais é do que uma interrupção de sistema, mais especificamente uma interrupção de software
  • 5.
  • 6.
    O que éinterrupção de sistema? Interrupção de sistema é um sinal emitido ao processador informando que um evento requer atenção imediata, algo semelhante ao seu chefe dizer para parar a sua tarefa atual para atender esta nova tarefa urgente (sendo que a anterior também era urgente :) ). Interrupções de sistema podem ser tanto de hardware quanto software. As interrupções de hardware são feitas através de sinais eletrônicos (semelhante a uma chave) e rodam de maneira assíncrona.
  • 7.
    Interrupções de Software Interrupçõesde software podem ser: uma operação ilegal executada pelo processador ou instruções (“pedaços” de códigos) especiais que ao serem executados geram uma interrupção. As system calls, códigos para solicitar ao SO o uso de algum hardware, são um tipo de interrupção. Exceptions são outro caso de interrupção de sistema.
  • 8.
  • 9.
    1. Software executauma instrução especial de interrupção de sistema 2. O processador recebe esta instrução 3. O processador para a thread atual 4. O processador salva o contexto da thread atual 5. O processador busca o handler de tratamento da interrupção 6. O handler é executado (exception handler) 7. A thread anterior é restaurada
  • 10.
    Existem dois tiposbásicos de exception: As tratadas pelo CLR e as não tratadas por ele As tratadas pelo CLR, localizam-se na stack E as não tratadas pelo CLR, localizam-se no heap e são chamadas de exceptions de código não gerenciado. Ambas podem ser capturadas e tratadas pelos blocos try/catch, salvo algumas “exceções” que não podem ser tratadas e terminam o programa.(Ex: stackoverflow) E como funciona no caso da Exception?
  • 11.
    Exception tratadas peloCRL (Unwinding) 1. Uma operação inválida é gerada 2. O runtime percorre a pilha(stack) buscando o handler de exception correto. Primeiro lexicamente e em seguida descendo pela call stack (bottom up). a. Em casos de exception de sistema(fora do .net framework) é buscada o handler de exception definido por um filter de tratamento SEH 3. Quando o handler correto é encontrado, a stack vai sendo “desenrolado” (unwond) até aquele ponto 4. No caminho até o ponto de exception a. todos os objetos locais são destruídos b. todos os blocos finally são executados 5. Chegando ao originador da exception, ela é acionada 6. O bloco finally é executado 7. A exception é tratada pelo manipulador de exception no código, ou bloqueia a thread atual. Em casos de stackoverflow a aplicação termina sua execução
  • 12.
    Exception de códigoNão Gerenciado ● Se uma exception de tipo nativo do c# ocorre, esta é desempacotada e comparada com o tipo encontrado. Desta forma o c# pode tratá-lo como se fosse um código gerenciado(via normal) ● Agora, se houver algum catch do tipo SEHException ou um de seus tipos base antes de um tipo de exception nativo do c#, o exception do SEH intercepta a exception antes. Este tipo de exception pode ser tratada de duas formas:
  • 13.
    Boas práticas aolidar com exceptions
  • 14.
    Conheça a anatomiada exception Data Obtém uma coleção chave/valor que proporciona informação adicional defina pelo usuário sobre àquela exception Helplink Contém o link para o arquivo associado àquela exception HResult Código numérico atribuído à exception InnerException Obtém a Exception que originou a exception atual Message Descreve a exception atual Source Contém nome da aplicação ou objeto que causou o erro StackTrace Obtém a string que representa os frames da call stack TargetSite Obtém o método que lançou a exception atual
  • 15.
    Boas práticas aolidar com exceptions ● Evite exceptions para erros capturáveis antes de “estourar exceptions” ● Try catch cala boca não. ● Ocorreu exception! Podemos tratar e seguir a execução? Se sim, trate, logue e segue o baile ● Utilize exceptions quando ○ for utilizar I/O ○ lib de terceiros ○ nas suas libs públicas ● Leia este artigo da Microsoft
  • 16.
  • 17.
    Obrigado class Juliano_Poveda { string medium= “@julianopoveda” string github = “/julianopoveda” string email = “julianopoveda@gmail.com” }

Notas do Editor

  • #4 Referências: https://docs.microsoft.com/en-us/dotnet/api/system.exception?view=netcore-2.2 https://www.significados.com.br/excecao/ https://dicionario.priberam.org/exce%C3%A7%C3%A3o https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/exceptions/ https://en.wikipedia.org/wiki/Exception_handling https://docs.microsoft.com/en-us/dotnet/standard/exceptions/
  • #8 Explicar como são tratadas as interrupções de software.
  • #10 Explicar que aqui o objetivo é interrupção de sw
  • #11 Explicar aqui o que acontece no exception handler https://docs.microsoft.com/en-us/cpp/dotnet/basic-concepts-in-using-managed-exceptions?view=vs-2019
  • #12  No caso do SEH, ele busca um filtro exceção, para capturar a exception SEH: structured exception handler:entender melhor ele(https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.sehexception?redirectedfrom=MSDN&view=netframework-4.8) lexico: conjunto de palavras que compõem a linguagem
  • #13 http://www.informit.com/articles/article.aspx?p=29060&seqNum=2
  • #14 Adicionar a anatomia de uma exception, ou seja, a estrutura do objeto
  • #16 Adicionar os guidelines da ms e falar sobre exceções tratáveis antes de ocorrer Utilize exceptions quando for utilizar I/O: comunicação com o banco, comunicação entre apis