SlideShare uma empresa Scribd logo
1 de 17
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”
}

Mais conteúdo relacionado

Mais procurados

Java cert programmer (assertions)
Java cert programmer (assertions)Java cert programmer (assertions)
Java cert programmer (assertions)Regis Melo
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosArthur Emanuel
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddCarlos Santana
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesAlvaro Oliveira
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensivaKayo Rayner
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em javaMarques Amaro
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade IIJoão Lourenço
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Helder da Rocha
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesAlisson Fuckner
 
Regiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisRegiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisAbadia Cardoso
 

Mais procurados (20)

JAVA - Tratamento de Erros
JAVA - Tratamento de ErrosJAVA - Tratamento de Erros
JAVA - Tratamento de Erros
 
Excepções JAVA
Excepções JAVAExcepções JAVA
Excepções JAVA
 
Java cert programmer (assertions)
Java cert programmer (assertions)Java cert programmer (assertions)
Java cert programmer (assertions)
 
Exceptions Em Java UFF
Exceptions Em Java UFFExceptions Em Java UFF
Exceptions Em Java UFF
 
Java: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de ErrosJava: Excecoes e Tratamento de Erros
Java: Excecoes e Tratamento de Erros
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tdd
 
Semana dois
Semana doisSemana dois
Semana dois
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Programação defensiva
Programação defensivaProgramação defensiva
Programação defensiva
 
Tratamento de exceção em java
Tratamento de exceção em javaTratamento de exceção em java
Tratamento de exceção em java
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
Curso java 07 - exceções
Curso java   07 - exceçõesCurso java   07 - exceções
Curso java 07 - exceções
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade II
 
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
Aula de Java 2: exceções (1999): Programa ASIT (IBPINET/UFRJ)
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redes
 
Aula 14 - Deadlocks
Aula 14 - DeadlocksAula 14 - Deadlocks
Aula 14 - Deadlocks
 
Regiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas OperacionaisRegiões críticas dos Sistemas Operacionais
Regiões críticas dos Sistemas Operacionais
 
Algoritmos - Comandos de Seleção
Algoritmos - Comandos de SeleçãoAlgoritmos - Comandos de Seleção
Algoritmos - Comandos de Seleção
 

Semelhante a Exceptions

Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHPLeonardo Soares
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java IVerônica Veiga
 
Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 
Qualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRNQualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRNFrederico Pranto
 
INTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdf
INTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdfINTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdf
INTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdfIvanSaboia1
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesVitor Silva
 
18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulistaitgfiles
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threadsSilvino Neto
 
Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Flávio Lisboa
 

Semelhante a Exceptions (20)

Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
Tratamento de exceções com PHP
Tratamento de exceções com PHPTratamento de exceções com PHP
Tratamento de exceções com PHP
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Apostila: Curso de java I
Apostila: Curso de java IApostila: Curso de java I
Apostila: Curso de java I
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Impasses S.O
Impasses S.OImpasses S.O
Impasses S.O
 
Java Básico :: Exceções
Java Básico :: ExceçõesJava Básico :: Exceções
Java Básico :: Exceções
 
Qualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRNQualificação de Mestrado - PPGSC UFRN
Qualificação de Mestrado - PPGSC UFRN
 
Montagen pc
Montagen pcMontagen pc
Montagen pc
 
INTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdf
INTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdfINTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdf
INTRODUÇÃO AO DESENVOLVIMENTO DE EXPLOITS.pdf
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - Excepções
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista18.ago esmeralda 15.00_321_cpfl paulista
18.ago esmeralda 15.00_321_cpfl paulista
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2
 

Exceptions

  • 2. Please let me introduce 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
  • 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çõ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.
  • 9. 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
  • 10. 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?
  • 11. 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
  • 12. 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:
  • 13. Boas práticas ao lidar com exceptions
  • 14. 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
  • 15. 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
  • 17. Obrigado class Juliano_Poveda { string medium = “@julianopoveda” string github = “/julianopoveda” string email = “julianopoveda@gmail.com” }

Notas do Editor

  1. 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/
  2. Explicar como são tratadas as interrupções de software.
  3. Explicar que aqui o objetivo é interrupção de sw
  4. 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
  5. 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
  6. http://www.informit.com/articles/article.aspx?p=29060&seqNum=2
  7. Adicionar a anatomia de uma exception, ou seja, a estrutura do objeto
  8. 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